我对准备好的语句有疑问,这是我的代码:
function query_array($table, $data) {
foreach ($data as $column => $value) {
$columns[] = sprintf("`%s` = '%s'", $column, $this->db->real_escape_string($value));
}
$column_list = join(',', $columns);
// Prepare the statement
$stmt = $this->db->prepare("UPDATE `?` SET ?");
$stmt->bind_param('ss', $table, $column_list);
// Execute the statement
$stmt->execute();
// Save the affected rows
$affected = $stmt->affected_rows;
// Close the statement
$stmt->close();
// ...
}
$this->db 返回一个对象;
$table = '设置'; (细绳)
$column_list:(字符串)
`title` = 'Socialsd',`captcha` = '0',`public` = '',`private` = '',`time` = '1',`perpage` = '10',`message` = '140',`mail` = '1',`inter` = '10000',`size` = '1048576',`format` = 'png,jpg,gif',`sizeMsg` = '1048576',`formatMsg` = 'png,jpg,gif,bmp',`censor` = '',`ad1` = '',`ad2` = ''
我得到的错误是:
致命错误:未捕获的异常 'ErrorException' 并带有消息“您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在“?”附近使用的正确语法 在 C:\xampp\htdocs\new\includes\classes.php:256 中的第 1 行 堆栈跟踪:#0 C:\xampp\htdocs\new\sources\admin.php(225): updateSettings->query_array(' settings', Array) #1 C:\xampp\htdocs\new\index.php(42): PageMain() #2 {main} 在第 256 行的 C:\xampp\htdocs\new\includes\classes.php 中抛出
我不知道是什么原因造成的,因为尝试以下方法就可以了:
$query = sprintf("UPDATE `%s` SET %s", $table, $column_list);
$result = $this->db->query($query);
任何帮助表示赞赏。
更新 1:我可以知道为什么这被否决了吗?很高兴知道。
更新2:所以我删除了最后一个绑定($column_list)并将$column_list的整个输出放入语句中,所以基本上我只绑定表名,现在我得到另一个错误:
找不到文件:'.\diary\@003f.frm'(错误号:22)
现在我真的很困惑。