-1

我对准备好的语句有疑问,这是我的代码:

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)

现在我真的很困惑。

4

1 回答 1

0

我在这里找到了答案:使用一个具有可变数量输入变量的 bind_param()以及@Jocelyn 链接我,我发现无法绑定表名。可以关闭。

于 2013-04-14T23:37:13.590 回答