mysqli的查询只能在本地主机上,而不是Web服务器
题
我已经改变了我的一些旧的查询到mysqli的框架,以提高性能。一切工作在本地主机上正常,但当我把它上传到Web服务器就输出什么。连接后,我检查错误和有没有。我还检查安装了PHP模块和mysqli的被启用。
我确信,它创建一个到数据库的连接,则不会显示任何错误。 (当i改变了数据库的名称字符串它给误差)
有没有来自于网络服务器查询输出,它看起来像这样:
$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();
正如我所说的这个代码工作完全在我的LocalServer只是不在线。检查错误日志并没有什么,所以一切指向一个良好的连接。所有表中也存在等任何人的任何想法,因为这其中有我的坚持!另外,如果我得到这个工作,将我所有的其他查询仍然工作?或将我需要让他们使用mysqli的框架呢?由于事先。
编辑:
好香港专业教育学院做了一些“调试”,看看发生了什么。还有就是表中的数据即时查询,查询相匹配。我做了以下检查准备语句:
echo "debug 1";
if ($stmt = $mysqli->prepare("$shiftQuery"))
{
echo "debug 2";
printf("Error: %s.\n", $stmt->error);
etc...
}
因此,基本上应该在statment之前输出“调试1”被制备(其中它不)。然后后它应该输出“调试2”和所发生的任何错误。
但问题是这里的某个地方因为它不IF语句中达到调试2线。由于连接的细节都很好,我真的不能明白为什么$ mysqli的对象不会是创建。这给任何人任何进一步的想法?
感谢
没有正确的解决方案
其他提示
到的mysqli /语句方法每次调用可能会失败。您应该检查每一个。结果 与使用error_reporting(E_ALL)和也许display_error =开
尝试它<?php
error_reporting(E_ALL); ini_set('display_errors', 1);
// passing database name as fourth parameter
$mysqli = new mysqli("server", "user", "password", 'dbname');
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 ( false===($stmt=$mysqli->prepare("$query")) ) {
echo 'mysqli::prepare failed: ', htmlspecialchars($mysqli->error);
die;
}
// Specify parameters to replace '?'
$rc = $stmt->bind_param("d", $id);
if ( !$rc ) {
echo 'bind_param failed: ', htmlspecialchars($stmt->error);
die;
}
echo '<pre>Debug: execute()</pre>';
$rc = $stmt->execute();
if ( !$rc ) {
echo 'execute failed: ', htmlspecialchars($stmt->error);
die;
}
echo '<pre>Debug: bind_result()</pre>';
// bind variables to prepared statement
$rc = $stmt->bind_result($_userName);
if ( !$rc ) {
echo 'bind_result failed: ', htmlspecialchars($stmt->error);
die;
}
echo '<pre>Debug: fetch()</pre>';
while ($stmt->fetch())
{
echo 'username: ', $_userName;
}
echo '<pre>Debug: stmt close()</pre>';
$stmt->close();
echo '<pre>Debug: mysqli close()</pre>';
$mysqli->close();
MySQL用户权限是主机敏感 - 它可以根据从其他宿主的不同的许可本地主机和用户1给用户1。
GRANT ALL ON *.* TO user@'%' IDENTIFIED BY 'password';
mysqli的框架不提高性能。结果 错误检查不仅要经过连接,但之后每个查询执行完成。
的错误检查结果$stmt->error
或尝试核对扔例外
时Id
的整数我通常运行我的mysqli等
$sql = "SELECT name FROM users WHERE id = ?";
if($stmt = $mysqli->mysqli->prepare($sql)){
$stmt->bind_param("i", $id);
if($stmt->execute()){
$stmt->bind_result($name);
$stmt->store_result();
if($stmt->fetch()){
return $name;
}else{
return 'Not Found';
}
}else{
return 'Execute Error';
}
}else{
return 'SQL Error';
}
希望帮助