【发布时间】: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 ->bindParam(':title', $title); -
@JuanCarlosOropeza 我不这么认为,因为我使用的是
array而不是绑定。无论如何我都试过了,没有任何改变。
标签: php sql if-statement foreach sql-update