【问题标题】:PHP mysqli->prepare returning nothingPHP mysqli->准备什么都不返回
【发布时间】:2015-04-08 10:57:08
【问题描述】:

我正在尝试使用 mysqli 连接从我的数据库中检索行,但是无论我尝试什么,我都会继续收到 500 内部服务器错误。

$getUserQuery = "SELECT * FROM members WHERE name = ? AND member_id > 0";
$getUserStatement = $mysqli_conn->prepare($getUserQuery);
$getUserStatement->bind_param("s", $name);

$mysqli_conn->ping() 的值是 true,所以我知道数据库连接没有问题。 var_dump($getUserStatement) 导致 bool(false) 所以准备有一些问题。完整代码:

$user_dirty = $_GET['u'];
$pass_dirty = $_GET['p'];

$getUserQuery = "SELECT * FROM members WHERE name = ? AND member_id > 0";
$getUserStatement = $mysqli_conn->prepare($getUserQuery);

if ($getUserStatement) {
    echo($getUserStatement);
} else {
    echo("not good");
}

$getUserStatement->bind_param("s", $user_dirty);
$getUserStatement->execute();
$getUserResult = $getUserStatement->get_result();

以及我如何创建数据库连接:

$mysql_host = "host";
$mysql_user = "user";
$mysql_password = "pass";
$mysql_database = "db";

$mysqli_conn = new mysqli($mysql_host, $mysql_user, $mysql_password, $mysql_database);

【问题讨论】:

  • 你需要像这样绑定参数$getUserStatement = $mysqli_conn->prepare($getUserQuery); $getUserStatement ->bind_param('s', $yoname); $getUserStatement ->execute();
  • 这正是我在此之后所做的。我将用更多代码更新帖子。
  • @Mihai 我认为他在 var_dump 上得到了错误,因为连接丢失或类似情况,因为在他设置参数之前,statment 必须是资源
  • @user2962442 我在准备后尝试 ping 并返回 true,所以我知道连接仍在维护中。
  • @Swizzbeat 在准备之前尝试 ping,它会在失去连接时重新连接

标签: php mysql database mysqli


【解决方案1】:

您收到 500 内部错误,因为语句可能是错误的(https://stackoverflow.com/a/845025/2962442 打开显示错误),而不是应有的资源,这可能是由于连接丢失造成的,请在准备之前尝试 ping 或重新连接。

优秀代码示例:

$getUserQuery = "SELECT * FROM members WHERE name = ? AND member_id > 0";
$getUserStatement = $mysqli_conn->prepare($getUserQuery);
if ($getUserStatement) {
    $getUserStatement->bind_param("s", $name);
} else {
    //statement is false, not good
}

以及连接部分的好例子

$mysql_host = "host";
$mysql_user = "user";
$mysql_password = "pass";
$mysql_database = "db";

$mysqli_conn = new mysqli($mysql_host, $mysql_user, $mysql_password, $mysql_database);    
if (!$mysqli_conn) {
    //not connected...
}

【讨论】:

  • 试过但没有成功。 ping 仍然返回 1。
  • 您使用哪个 DB 驱动程序连接?
  • bind_param 返回 true 但是我仍然在代码的第 1 行收到 500 内部服务器错误,并且该语句从未执行。
  • 使用execute方法执行语句,500错误是内部服务器错误,然后启用php错误
  • display_errors 在我的 php.ini 文件中打开,但没有显示任何内容。
猜你喜欢
  • 2012-08-12
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 2023-04-10
  • 2012-01-31
  • 2013-03-25
相关资源
最近更新 更多