【问题标题】:Error using variable inside UPDATE query, why?在 UPDATE 查询中使用变量时出错,为什么?
【发布时间】:2018-11-22 15:31:49
【问题描述】:

我有这个代码来更新我的记录并检查相应的input 上是否有任何值。但它甚至没有更新我的记录,当我点击提交时出现此错误:

致命错误:未捕获的 PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在 '? 附近使用的正确语法。 =':标题',? = ':keywords' WHERE 标题 = ?'

if(isset($_POST["updateBTN"])){    

  $insert_data = array(
    'keywords'         => $_POST['keywords'],
    'img'              => $_POST['img'],
    'widht'            => $_POST['widht'],
    'status'           => $_POST['status'],
    'name'             => $_POST['name'],
    'height'           => $_POST['height']
  );
    $sets="";

    foreach ($insert_data as $column => $value) {

        if ($value!=""){

            $sets .= $column." = '".$column."', ";

        }
    }
     $sets = rtrim($sets, ', ');

     $query = "UPDATE table SET $sets WHERE title = :title";
     $stmt = $conn->prepare($query);
     $stmt->execute($insert_data);

}

html:

<form  method="post">
<div>
    <input type="text" name="title"> 
    <span data-placeholder="Title"></span>          
</div>
<div>
    <input type="text" name="keywords"> 
    <span data-placeholder="keywords"></span>          
</div>
<div>
    <input type="text" name="img"> 
    <span data-placeholder="img"></span>          
</div>
.
.
.
<button type="submit" name="updateBTN">Send</button>
</form>

【问题讨论】:

  • 你确定你给出了var_dump()的正确输出吗?
  • 回显您的 $query 并检查这是否是您要查找的输出
  • 在构建 SQL 时,任何字符串值都需要包含在引号内(例如 $sets .= $column." = '".$column."', ";),但我也建议使用准备好的语句。
  • $query = "UPDATE table SET $sets WHERE title = :title"; ... 需要绑定参数$query -&gt;bindParam(':title', $title);
  • @JuanCarlosOropeza 我不这么认为,因为我使用的是array 而不是绑定。无论如何我都试过了,没有任何改变。

标签: php sql if-statement foreach sql-update


【解决方案1】:
  • Widht”看起来拼写错误。那是实际的列名吗?
  • print_r($sets); 向您展示了什么?
  • $column 值最好用反引号括起来
  • 我希望你正在清理 $_POST 数据!!!
  • 您的错误指出“在 '? = ':title', ? = ':keywords' WHERE title = ?' 附近使用正确的语法”,这意味着错误出现在第一个 @987654325 之前@。因此,请查看上述项目符号中的 $sets 字符串输出。

最后但同样重要的是:

【讨论】:

    猜你喜欢
    • 2020-05-12
    • 1970-01-01
    • 2020-05-05
    • 2017-08-14
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 2013-09-23
    相关资源
    最近更新 更多