【发布时间】:2017-03-06 07:05:44
【问题描述】:
<?php
require_once 'functions.php';
try{
$stmt=$connection->prepare("
SELECT ACT_ID, NAME, COST, DESCRIPTION, EXTRA_DETAILS, REFID,IMAGE
FROM ACTIVITIES
WHERE ACT_ID = ?
");
$stmt->bind_param("i",$_GET['id']);
$stmt->execute();
$result=$stmt->get_result();
$actData=getAllData($result);
if ( isset($_SESSION["user_id"]) && $_SESSION["user_id"] != "" ){
$stmt=$connection->prepare("
SELECT id
FROM google_users
WHERE id=? AND gender IS NOT NULL
");
$stmt->bind_param("i",$_SESSION['user_id']);
$stmt->execute();
if ($stmt->fetch()){
$actData[0]["HAS_USER_INFO"]=TRUE;
}
//PROBLEM STATEMENT1##############################
$stmt=$connection->prepare("
SELECT `REG_ID`
FROM `ACTIVITY_REGISTRATION`
WHERE `USER_ID` = ? AND `ACTIVITY` =?
");
$stmt->bind_param("ii",$_SESSION['user_id'],$_GET['id']);
$stmt->execute();
if ($stmt->fetch()) {
$actData[0]["REGISTERED"]=TRUE;
}
}
//PROBLEM STATEMENT2#########################3
$stmt=$connection->prepare("
SELECT O.`COST`, O.`DESCRIPTION`, O.`OPTION_ID`
FROM `ACTIVITIES` A, `ADD_OPTIONS` O
WHERE `ACT_REF` = `REFID` AND `ACT_REF` = ?
");
$stmt->bind_param("s",$actData[0]["REFID"]);
$stmt->execute();
$result=$stmt->get_result();
$opData=getAllData($result);
}catch(Exception $e){
echo $e->getMessage();
}
$stmt->close();
?>
我遇到了致命错误:在“问题状态 2”上调用布尔值的成员函数 bind_param()
我已经做了什么:
1) 检查 SQL 是否有错误:我在 phpmyadmin 和 php(单独)中运行它,带和不带 `` 引号,两个问题语句都没有错误。我还尝试将它们简化为没有绑定的非常简单的 SELECT * 语句,但它仍然失败。
2) 分配唯一变量而不是覆盖 $stmt:错误没有变化
3) 检查列名、数据类型和限制字:它们都签出
4) 有界变量的检查值:它们都存在
我发现了什么:
奇怪的是,如果我删除 PROBLEM STATEMENT1,PROBLEM STATEMENT2 将毫无错误地运行,类似地,如果我删除 PROBLEM STATEMENT2,其余代码正常运行,如果我交换它们在代码中的位置,错误总是出现在前导语句。
有人知道为什么会这样吗?
【问题讨论】:
-
根据此处的其他线程,使用
$db->errorInfo()和$db->errorCode()获取错误原因。 -
mysqli(在我的例子中是 $connection)->errno 和 error 在故障点分别返回 0 和 ""