2014-11-07 4 views
-1

확인을 나는 다음과 같이 기입 일부 PHP 코드 그래서 :MySQL과 PHP 오류. 이상한 쿼리 동작

Database.php

<?php 
class Database 
{ 
    protected $__link; 
    public function __construct() 
    { 
     $this->__link = mysqli_connect("localhost", "db", 'pw','user'); 
    } 
    public function getUsernameForBot($id) 
    { 
     if (mysqli_ping($this->__link)) { 
      printf ("Our connection is ok!\n"); 
     } else { 
      printf ("Error: %s\n", mysqli_error($this->__link)); 
     } 
     //Get list of used usernames. 
     $__query = "SELECT * 
        FROM users 
        WHERE users.user_id NOT IN 
        ( 
         SELECT bot_uname 
         FROM bots 
        )" or die(mysqli_error($this->__link)); 
     $__result = $this->__link->query($__query); 
     echo $this->__link->error; 
     $__usernames = array(); 
     while ($__row = $__result->fetch_assoc()) { 
       array_push($__usernames,$__row); 
     } 
     foreach($__usernames as &$_user) 
     { 
      //TODO: do some checking on the users time. 
      $_userid = $_user['user_id']; 
      $__query = "UPDATE bots 
         SET bot_uname = $_userid 
         WHERE bot_id = $id;" or die(mysqli_error($this->__link)); 
      $__result = $this->__link->query($__query); 
      echo $this->__link->error; 
      return $_user['user_name'] . "/" . $_user['user_pass']; 
     } 
    } 
    public function closeConn() 
    { 
     $this->__link->close(); 
    } 
} 
$mydb = new Database(); 
?> 

을 그리고 난이처럼 나열이 MySQL의 DB를 가지고 :

을 봇 데이터베이스

int(11) int(11) 
bot_id  bot_uname 
0   -1 

ers 데이터베이스

int(11) varchar(32) varchar(32) 
user_id user_name  user_pass 
0   someuser  somepass 

그리고 다른 php 파일에는 이런 식으로 서면으로 작성했습니다.

index.php를

<?php 
include("Database.php"); 
echo $mydb->getUsernameForBot(3); 
$mydb->closeConn(); 
?> 
지금의 예상 결과

웹 페이지는 결과 someuser/somepass 및 봇 데이터베이스의 내용처럼이 것을 사용하고 있음을 반영하도록 변경되어 보이는됩니다 사용자 이름. 그리고 작동합니다. 때때로.

나는 이유를 모르지만 때로는 작동을 멈추고 작동하지 않을 수도 있습니다. 코드에 변경 사항이 없습니다. 당신이 볼 수 있듯이 내가 사용하기 전에 내 링크가 닫혀 있는지 확인하기위한 연결 테스트가 포함되어 있습니다.

또한 mysql 오류가 있는지 확인하기 위해 오류 출력이 있습니다. 가 있습니다.

나는 쿼리의 리턴 사이즈를 체크했다.

iv가 apachi 및 mysql을 다시 시작했습니다. 변경 사항 없음

메신저 내 코드를 반복해서 확인하기가 너무 심해서 작동하는 것을 지켜보고 몇 분 후에 멈추게됩니다. 경고가 없습니다. 더 아무것도.

편집 :: 제거 the ;; 쿼리에서 변경 사항이 없습니다.

편집 :: 정적에서 정적으로 변화시키지 않으려 고 시도했습니다. 변경되지 않았습니다.

누구나 awnser가 있습니까?

+1

왜 모든 것이 '정적'입니까? 그게 네 문제 야. – developerwjk

+0

메신저'$ this/self'가 정적으로 호출되었을 때 문맥 밖으로 벗어났습니다. 대신 – andrew

+0

@developerwjk ok 정적, 정적이 아닌 다른 것을 모두 변경 한 후 –

답변

0

wamp 자체에 문제가있는 것 같습니다. wamp를 다시 설치 한 후에도 문제가 발생하지 않습니다.