확인을 나는 다음과 같이 기입 일부 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가 있습니까?
왜 모든 것이 '정적'입니까? 그게 네 문제 야. – developerwjk
메신저'$ this/self'가 정적으로 호출되었을 때 문맥 밖으로 벗어났습니다. 대신 – andrew
@developerwjk ok 정적, 정적이 아닌 다른 것을 모두 변경 한 후 –