【发布时间】:2010-11-16 05:30:34
【问题描述】:
我有一个函数,它根据要插入该列的列名和值的关联数组以及表名(简单字符串)生成准备好的 INSERT 语句:
function insert ($param, $table) {
$sqlString = "INSERT INTO $table (".implode(', ',array_keys($param)).') VALUES ('.str_repeat('?, ', (count($param) - 1)).'?)';
if ($statement = $this->conn->prepare($sqlString)):
$parameters = array_merge(array($this->bindParams($param), $param));
call_user_func_array(array($statement, 'bind_param', $parameters));
if (!$statement->execute()):
die('Error! '.$statement->error());
endif;
$statement->close();
return true;
else:
die("Could Not Run Statement");
endif;
}
我的问题是 $this->conn->prepare(它是一个类的一部分,conn 是一个新的 mysqli 对象,可以正常工作)返回 false,但没有给我一个理由!
这是为准备语句构建的示例 $sqlString:
INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
谁能看出这个参数化语句有问题?准备函数返回 false 的任何原因?
【问题讨论】:
-
您是否收到错误消息(请参阅 php.net/manual/en/mysqli.error.php 当 prepare 返回 false 时?);如果是,那是什么?
-
您是否尝试过在数据库中运行实际的 INSERT 语句,以查看您的 SQL 是否正确?
-
我刚刚打开了 mysqli_report(MYSQLI_REPORT_ALL) 以更好地了解正在发生的事情 - 结果我的一个字段名称不正确 - 你会认为 prepare() 会抛出异常,但它默默地失败了。
-
@Pascal - Prepare() 出错时返回 false,它不返回我可以读取的实际错误,它只是失败了。
-
@Andrew :这就是为什么我建议使用应该指示错误消息的方法/属性。反正:你的问题解决了吗? (从您之前的评论来看,似乎是,但我更愿意确定)
标签: php mysqli prepared-statement