【发布时间】:2010-03-30 06:54:11
【问题描述】:
我已将一些旧查询更改为 Mysqli 框架以提高性能。在本地主机上一切正常,但是当我将它上传到网络服务器时,它什么也没输出。连接后我检查错误,没有。我还检查了安装的 php 模块并启用了 mysqli。
我确信它会创建与数据库的连接,因为没有显示任何错误。 (当我更改数据库名称字符串时,它给出了错误)
网络服务器上的查询没有输出,如下所示:
$mysqli = new mysqli("server", "user", "password");
if (mysqli_connect_errno()) {
printf("Can't connect Errorcode: %s\n", mysqli_connect_error());
exit;
}
// Query used
$query = "SELECT name FROM users WHERE id = ?";
if ($stmt = $mysqli->prepare("$query"))
{
// Specify parameters to replace '?'
$stmt->bind_param("d", $id);
$stmt->execute();
// bind variables to prepared statement
$stmt->bind_result($_userName);
while ($stmt->fetch())
{
echo $_userName;
}
$stmt->close();
}
}
//close connection
$mysqli->close();
正如我所说,这段代码在我的本地服务器上完美运行,只是不在线。检查了错误日志,没有任何东西,所以一切都表明连接良好。所有的表都存在等等。任何人都有任何想法,因为这个让我卡住了!另外,如果我得到这个工作,我所有的其他查询仍然有效吗?或者我是否需要让他们也使用 mysqli 框架?提前致谢。
编辑:
好的,我已经进行了一些“调试”以查看发生了什么。我正在查询的表中有与查询匹配的数据。我做了以下检查准备语句:
echo "debug 1";
if ($stmt = $mysqli->prepare("$shiftQuery"))
{
echo "debug 2";
printf("Error: %s.\n", $stmt->error);
etc...
}
所以基本上它应该在准备好语句之前输出'debug 1'(它确实如此)。然后它应该输出'debug 2'和发生的任何错误。
问题出在某处,因为它没有到达 IF 语句中的 debug 2 行。由于连接细节很好,我真的不明白为什么 $mysqli 对象不会被创建。这给任何人任何进一步的想法???
谢谢
【问题讨论】:
-
你在哪里选择数据库?它要么是构造函数的第四个参数,要么是对 mysqli::select_db 的调用。
-
好吧,你打中了 VolkerK 的头。我使用的是旧连接方式中的三个连接参数。我上传的那个没有选择数据库,但是在本地服务器上,它是从对另一个连接脚本的调用中选择的。谢谢大家的cmets,非常欢迎他们。