我已经改变了我的一些旧的查询到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';
            }

希望帮助

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top