【发布时间】:2014-11-07 23:27:50
【问题描述】:
好的,所以我写了一些这样的php代码:
数据库.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();
?>
我列出了 2 个 MySQL 数据库,如下所示:
机器人数据库
int(11) int(11)
bot_id bot_uname
0 -1
和用户数据库
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 并且 bots 数据库的内容被更改以反映它正在使用该用户名。 它有效。有时。
我不知道为什么,但有时它会启动并停止工作。 没有更改代码,什么都没有。 如您所见,我包含了一个连接测试,以查看我的链接是否在我使用它之前被关闭,它不是。
我也有错误输出来检查是否有任何 mysql 错误。 有。
我检查了查询的返回大小,有时是正确的数量,有时是 0;
iv 重新启动了 apachi 和 mysql。 没有变化。
我非常沮丧地一遍又一遍地检查我的代码,看着它工作,然后几分钟后,它就会停止。没有警告。没什么。
edit::删除 ;;在查询中,没有变化。
edit::尝试将事物从静态更改为非静态,没有变化。
有人有遮阳篷吗?
【问题讨论】:
-
为什么都是
static?那是你的问题。 -
我很确定
$this/self在静态调用时脱离上下文尝试实例化类 -
@developerwjk 好的,我开始链它不是静态的,
-
@developerwjk 在将所有内容从静态更改为非静态后,工作了 2 分钟,然后再次停止。更新帖子。
-
停止工作时是否出现错误?如果您通过 apache 调用代码,请检查 apache error.log 文件。