在 laravel 中使用基本更新查询时出错

Posted

技术标签:

【中文标题】在 laravel 中使用基本更新查询时出错【英文标题】:Error in using basic update query in laravel 【发布时间】:2019-10-29 14:53:52 【问题描述】:

我正在尝试运行 innoDB 服务器中的以下代码,以使用基本查询表单更新表的值。但它一直显示错误。

if(isset($_POST['col_opt']) &&
    isset($_POST['val1']) &&
    isset($_POST['where_opt']) &&
    isset($_POST['val2']) 
)
    $col_name = $_POST['col_opt'];
    $nvalue = $_POST['val1'];
    $cond = $_POST['where_opt'];
    $condval = $_POST['val2'];

    DB::update("UPDATE animes SET ? = ? Where ? = ?",
        [$col_name, $nvalue, $cond, $condval]);

sql 正在获取所有变量的值。但它仍然显示错误:

SQLSTATE[42000]:语法错误或访问冲突:1064

你有一个 SQL 语法错误;检查与您对应的手册 MariaDB 服务器版本,用于在 '? 附近使用正确的语法= ?在哪里 ? = ?'在第 1 行(SQL:UPDATE 日本动漫 SETgenre_id = 2 其中 anm_id = 4)

当手动给出列名时它会起作用。

它不应该在变量的情况下也起作用吗?

【问题讨论】:

你试过用DB::raw代替DB::update吗? 是的,我试过了。没有错误显示。但是数据库表没有更新。 见this @nowshintasnim 您不能替换 DB::update() 中的列,因为它使用参数化查询意味着查询(列名)并且参数单独发送并且 [?, ?] 不能用于发送列姓名。但是您可以使用串联来动态生成查询字符串DB::update("UPDATE animes SET ".$col_name." = ? Where ".$cond." = ?",[$nvalue, $condval]),但一定要清理变量以防止 sql 注入 @Viney 谢谢。它正在工作。 【参考方案1】:

尝试使用此查询,

DB::update("UPDATE animes SET ? = '%?%' Where ? = '%?%' ",
        [$col_name, $nvalue, $cond, $condval]);

DB::table('animes')
            ->where($cond, $condval)
            ->update([$col_name =>DB::raw($value)]);

【讨论】:

以上是关于在 laravel 中使用基本更新查询时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中更新表单出错

更新到 Laravel 5.4 时出错

在 laravel 5.4 中测试文件上传时出错

Laravel 5.2 - 使用 composer 和 git bash 安装 laravel 时出错

Laravel 5.3 Passport - Vue 错误:评估表达式时出错

如何为 8.x 版本更新 Laravel 安装程序?