为什么这个基本的mysqli准备好的声明不起作用?

时间:2013-01-17 17:47:23

标签: mysqli prepared-statement

我正在尝试使用MySQLi预处理语句对我的数据库进行简单的SELECT查询。我已阅读了大量的教程并非常密切地关注它们,但由于某种原因它仍然无法正常工作。以下是查询代码:

<?php
$user = 'abc';
$dbconn = new mysqli("localhost", "my_user", "my_password", "my_table");

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
if ($stmt = $dbconn->prepare("SELECT id, pass  FROM my_table WHERE user=?")) {
$stmt->bind_param("s",$user);    
$stmt->execute();
$stmt->bind_result($db_id,$db_pass);
$stmt->fetch();
$stmt->close();
}
$dbconn->close();
echo $db_id . ' ' . $db_pass;
?>

当我运行时,这并不是说我有连接错误而是服务器错误。我有相当多的PHP经验,但对MySQLi准备好的语句来说是全新的。任何帮助将不胜感激;谢谢你的时间。

2 个答案:

答案 0 :(得分:2)

对于拥有大量PHP经验的人来说,你对错误报告非常轻松 由于您没有提供错误消息,我们只能猜测它是常规Web服务器503的响应 在这种情况下,您必须在服务器的error_log中搜索实际的错误消息,阅读它并采取适当的措施来修复它。

检查$dbconn->error也有帮助。

报告错误的方法有两种:

  • 在屏幕上显示它们(在开发时体面,但在制作时不可接受)
  • 将它们写入日志(绝对必须在生产服务器上)

有一些ini设置负责此行为。

  • display_errors告诉PHP它应该显示错误
  • log_errors告诉PHP它应该记录错误。默认情况下,它会登录到web-servers的error_log
  • error_log告诉php必须编写PHP错误的文件名

请使用您的托管工具设置适当的设置 否则你无论如何都无法使用这个主机 - 如果程序员看不到错误信息就无法工作。

一旦您掌握了错误消息,将其直接转发到Google搜索表单非常有用。很可能有人已经遇到过相同甚至是asked it on Stackoverflow

答案 1 :(得分:1)

我看到的第一件事是:

$dbconn = new mysqli("localhost", "my_user", "my_password", "my_table");

应该是:

$dbconn = new mysqli("localhost", "my_user", "my_password", "my_db");

试试看看会发生什么。