在 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 5.2 - 使用 composer 和 git bash 安装 laravel 时出错