如何使用PHP调试prepare语句?

时间:2017-07-05 18:17:41

标签: php mysql database debugging

我正在尝试使用下面的代码在我的数据库中插入值。但是它没有输入值。我想调试&打印我尝试$stmt->error$stmt->errorInfo()的任何错误消息,但没有任何对我有用。

$stmt = $this->conn->prepare("INSERT INTO users(name) values(?)");
$stmt->bind_param("s", "dhieaj");

$result = $stmt->execute();
echo $stmt->errorInfo();
$stmt->close();
// Check for successful insertion
if ($result){
    // User successfully inserted
    return USER_CREATED_SUCCESSFULLY;
}

2 个答案:

答案 0 :(得分:1)

我尝试在我的本地AppEngine服务器上运行相同的代码,以及我的调查结果:

原始代码:

$stmt = $this->conn->prepare("INSERT INTO users(name) values(?)");
$stmt->bind_param("s", "dhieaj");

$result = $stmt->execute();
echo $stmt->errorInfo();
$stmt->close();
// Check for successful insertion
if ($result){
// User successfully inserted
    return USER_CREATED_SUCCESSFULLY;
}

<强>实验:

$stmt->bind_param("s", "dhieaj");  
// failed with error ( <b>Fatal error</b>:  Cannot pass parameter 2 by reference in <b>C:\...)

所以我将该行修改为:

$param="dhieaj";
$stmt->bind_param("s", $param);

我得到的下一个错误是:     echo $ stmt-&gt; errorInfo(); //(调用未定义的方法mysqli_stmt :: errorInfo()) 所以我评论了这条线。

然后我将你的return语句修改为echo,因为我只是你发布的一个片段。

我也注意到你的conn缺少&#39; $&#39;申报密钥。 ($康恩)。

最终代码:

$stmt = $conn->prepare("INSERT INTO users(firstname) values(?)");
$p="dhieaj";
$stmt->bind_param("s", $p);

$result = $stmt->execute();
// echo $stmt->errorInfo();
$stmt->close();
// Check for successful insertion
if ($result){
    // User successfully inserted
    echo "USER_CREATED_SUCCESSFULLY";
}

答案 1 :(得分:0)

实际上这里提到的代码是由DLastCodeBender&#39;是正确的,但我仍然无法解决我的问题。问题是 MAMP 服务器。我无法使用MAMP运行Slim框架。所以我安装了 XAMPP 我的mac&amp;所有API都适用于我。