PHP MySQLi Prepaired Statement的返回false

时间:2016-12-09 11:16:46

标签: php database mysqli mariadb

通过管理我们的数据库表条目的类系统,我遇到了一个预付费语句系统的问题。

所以我遇到的问题是生成的

的SQL
INSERT INTO `sys_User` SET `email` = ? `last_name` = ? `password` = ? `encryption` = ?
$stmt = $db->prepare($sql);下面的行

失败(返回false)

但是我没有收到数据库引擎的错误,

Array
(
    [Number] => 256
    [String] => MySQLi Query failed MySQL said ''.
    [File] => /var/www/models/table/base.php
    [Line] => 282
)

在所有数据库表类的基类中。

$db = self::getDatabase();
$bindParamArgs = array();
$bindParamArgs[] = "";
$sql = "INSERT INTO `".$this->getTableName()."` SET ";
foreach($this->updated as $name => $val){
    $sql .= " `".$name."` = ?";
    $bindParamArgs[0] .= $columns[$name]->Type;
    $bindParamArgs[] = &$this->values[$name]; 
}
echo $sql;
$stmt = $db->prepare($sql);
if(!$stmt){
    \trigger_error("MySQLi Query failed MySQL said '".$stmt->error."'.", \E_USER_ERROR);
}
$result = \site\model\Database::getEvaluatedBind($stmt, $bindParamArgs);

一些需要的信息: self::getDatabase();返回Database(MySQLi)对象

的连接

$this->getTableName()获取我们正在使用的表的表名是从已被调用的类名中得出的

$this->updated表中所有列的数组等于布尔值,如果它已被修改并需要保存。

\site\model\Database::getEvaluatedBind(mysqli_stmt &$stmt, $params)我创建了一个调用bind_param的自定义方法,它通过引用系统保持该死的通过,

这一定是如此简单我想念的东西我无法解决这个问题

1 个答案:

答案 0 :(得分:2)

答案基于@ jeroen上面的评论

这里遇到了你的错误:

INSERT INTO `sys_User` SET `email` = ? `last_name` = ? `password` = ? `encryption` = ?

它应该是:

INSERT INTO `sys_User` SET `email` = ?, `last_name` = ?, `password` = ?, `encryption` = ?