为了账号安全,请及时绑定邮箱和手机立即绑定

语法错误。(绑定值?

语法错误。(绑定值?

PHP
蝴蝶刀刀 2022-09-17 21:30:54
我正在尝试创建一个更新查询,并且我正在将一些设置的内容循环到一个名为$str的var中,我似乎无法使其正常工作。       if (is_numeric($id)) {           if (!empty($values) && !empty($table_name)) {               $str = '';               $sql = "UPDATE `$table_name` SET :update_values WHERE `$column_name` = :id";               // Its one because we dont use ID like that               $i = 1;               foreach ($values as $key => $value) {                   if ($key != $column_name) {                       // Exclude the last one from having a comma at the end                       if ($i == count($values) - 1) {                           $str .= "$key='" . $value . "'";                       } else {                           $str .= "$key='" . $value . "', ";                           $i++;                       }                   }               }               $query = $this->dbh->prepare($sql);               $query->bindValue('update_values', $str, PDO::PARAM_STR);               $query->bindValue(':id', $id, PDO::PARAM_INT);               $query->execute();               return true;             } else {               return false;           }       } else{           return false;       }   }输出:致命错误: 未捕获的 PDO异常: SQLSTATE[42000]: 语法错误或访问冲突: 1064 您的 SQL 语法中存在错误;检查与您的 MariaDB 服务器版本对应的手册,了解在第 1 行note_name=\'yeet'附近使用的正确语法,note_date=\'2020-02-20\',note_desc=\'asdasdadsdadsdasdad我是否犯了任何明显的错误?同样,对于我的生活,我不知道值前面的反斜杠是什么意思。
查看完整描述

1 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

在MySQL中,标识符不能作为值提供。


对列的引用必须出现在 SQL 语句的文本中,它们不能通过绑定参数提供。这适用于表名、列名、函数名。


没有解决方法;这是一个设计限制。这有几个原因。最直接的原因之一是了解SQL语句的准备方式,提出执行计划所需的信息,表和列必须在准备时知道(用于语义检查和特权检查)。实际值可以推迟到执行时间。


绑定占位符用于提供值,而不是标识符。


通过给定的代码,MySQL看到的是沿着以下路线的东西


 UPDATE `mytable` SET 'a string value' WHERE `id_col` = 42

而我的学习进度正在犹豫不决。'a string value'


我们可以(也应该)对值使用绑定参数。


我们可以动态生成如下所示的 SQL 文本:


    UPDATE `mytable`

       SET `col_one` = :val1

         , `col_two` = :val2

     WHERE `id_col` = :id 

在将SQL文本准备到语句中后,我们可以绑定值:


         $sth->bindValue(':val1', $value_one , PDO::PARAM_STR );

         $sth->bindValue(':val2', $value_two , PDO::PARAM_STR );

         $sth->bindValue(':id'  , $id        , PDO::PARAM_INT );

然后执行


查看完整回答
反对 回复 2022-09-17
  • 1 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信