通过管理我们的数据库表条目的类系统,我遇到了一个预付费语句系统的问题。
所以我遇到的问题是生成的
的SQLINSERT 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的自定义方法,它通过引用系统保持该死的通过,
这一定是如此简单我想念的东西我无法解决这个问题
答案 0 :(得分:2)
答案基于@ jeroen上面的评论
这里遇到了你的错误:
INSERT INTO `sys_User` SET `email` = ? `last_name` = ? `password` = ? `encryption` = ?
它应该是:
INSERT INTO `sys_User` SET `email` = ?, `last_name` = ?, `password` = ?, `encryption` = ?