在准备好的声明中准备失败

时间:2015-07-03 02:45:05

标签: php mysqli prepared-statement

我正在尝试从上一页获取用户ID并将信息输出到另一个页面,并且在我准备好的语句中,我在语句的准备部分中收到错误。我没有得到的是我在我拥有的另一个网站上有这个几乎完全相同的代码,并且它的工作完全正常。我很难过,我查看了我的数据库中的所有名称,一切都是正确的。

这是我得到的错误:

prepare()失败:您的SQL语法出错;检查与您的MySQL服务器版本对应的手册,以便在'group FROM users WHERE id =?'附近使用正确的语法在第1行

正在提到的那一行是......

$stmt = $con->prepare("SELECT fullname, email, username, group FROM users WHERE id = ?");

这是完整的准备声明。

<?php
$con = mysqli_connect("localhost","root","","db");
/* check connection */
   if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
    $stmt = $con->prepare("SELECT fullname, email, username, group FROM users WHERE id = ?");
    if ( false===$stmt ) {
  // Check Errors for prepare
  die('prepare() failed: ' . htmlspecialchars($con->error));
}
$stmt->bind_param("i", $_GET['id']);
    if ( false===$stmt ) {
      // Check errors for binding parameters
      die('bind_param() failed: ' . htmlspecialchars($stmt->error));
    }
$stmt->execute();
    if ( false===$stmt ) {
      die('execute() failed: ' . htmlspecialchars($stmt->error));
    }
    //Check errors for execute
//if(!$stmt->execute()){trigger_error("there was an error....".$con->error, E_USER_WARNING);}
$stmt->bind_result($fullname, $email, $username, $group);
$stmt->store_result();

if ($stmt->fetch()) { ?>

我错过了一些非常明显或可能导致这种情况的事情吗?

1 个答案:

答案 0 :(得分:1)

在组周围放置一个反引号(严重重音符号)或引号(或撇号),使它看起来像这个`group`。它是一个MySQL关键字,因此搞砸了你的查询。使用列名称始终这样做是很好的做法。