PHP MySQLi 预编译语句的 returns false
PHP MySQLi Prepaired Statement's returns false
我在使用预配对语句系统时遇到问题,尽管 类 的系统管理我们的数据库 Table 条目。
所以我遇到的问题是
生成的 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
)
在所有数据库 class Table 类.
的基础中
$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();
Returns 连接数据库 (MySQLi) 对象
$this->getTableName()
获取 table 我们正在使用的 table 的名称 这是根据已调用的 class 名称得出的
$this->updated
Table 中所有列的数组如果已被修改并需要保存,则等于布尔值 true。
\site\model\Database::getEvaluatedBind(mysqli_stmt &$stmt, $params)
我创建的调用 bind_param 的自定义方法,它让该死的引用系统快乐,
这一定很简单,我想念我只是无法解决
答案基于@jeroen 上面的评论
这是 运行 你的错误:
INSERT INTO `sys_User` SET `email` = ? `last_name` = ? `password` = ? `encryption` = ?
应该是:
INSERT INTO `sys_User` SET `email` = ?, `last_name` = ?, `password` = ?, `encryption` = ?
我在使用预配对语句系统时遇到问题,尽管 类 的系统管理我们的数据库 Table 条目。
所以我遇到的问题是
生成的 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
)
在所有数据库 class Table 类.
的基础中$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();
Returns 连接数据库 (MySQLi) 对象
$this->getTableName()
获取 table 我们正在使用的 table 的名称 这是根据已调用的 class 名称得出的
$this->updated
Table 中所有列的数组如果已被修改并需要保存,则等于布尔值 true。
\site\model\Database::getEvaluatedBind(mysqli_stmt &$stmt, $params)
我创建的调用 bind_param 的自定义方法,它让该死的引用系统快乐,
这一定很简单,我想念我只是无法解决
答案基于@jeroen 上面的评论
这是 运行 你的错误:
INSERT INTO `sys_User` SET `email` = ? `last_name` = ? `password` = ? `encryption` = ?
应该是:
INSERT INTO `sys_User` SET `email` = ?, `last_name` = ?, `password` = ?, `encryption` = ?