提交时我一直收到此错误。我已经检查了我的表格10x,我无法弄清楚它有什么问题。
这是错误
SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MySQL服务器版本相对应的手册,以便在#< WHERE order_num =' 5293528''''''''在第1行
这是表单代码
public function next()
{
try
{
if(isset($_POST['giventoatpdate']))
{
$update = trim($_POST['update']);
$orders = $_SESSION['order_nums'];
$st=$this->db->prepare("INSERT INTO `orders` (giventoatpdate) VALUES (:upd) WHERE order_num = :orderr");
$st->bindparam(":upd", $update);
$st->bindparam(":orderr", $orders);
$st->execute();
return $st;
}
$order = $_GET['uid'];
$stmt=$this->db->prepare("SELECT * FROM orders WHERE order_num = :order");
$stmt->execute(array(":order"=>$order));
$row=$stmt->fetch(PDO::FETCH_ASSOC);
if($row['giventoatpdate'] = ' ')
{
echo
"
<form name='atpdate' method='POST'>
Date Sent to clown?
<br>
<input type='text' name='update'>
<br>
<input type='submit' name='giventoatpdate'>
</form>
";
}
其他一切都很好。当我点击提交时,它会给我这个错误。
答案 0 :(得分:4)
看到有人弹出答案......
这是因为INSERT没有WHERE子句。
现在阅读手册http://dev.mysql.com/doc/en/insert.html
INSERT ... ON DUPLICATE KEY UPDATE。
或者,您可能打算进行更新。 http://dev.mysql.com/doc/en/update.html
在POST数组中看到$update = trim($_POST['update']);
操作词是“更新”,我想你想在这里进行UPDATE而不是INSERT,因为你正在处理从你的站点获取的命令。
所以,你在这里有一些选择。
如果是更新,您的查询将显示为:
UPDATE `orders`
SET giventoatpdate = :upd
WHERE order_num = :orderr
检查错误:
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Then the rest of your code
旁注:只应在暂存时进行显示错误,而不是生产。
<强>脚注:强>
看到if($row['giventoatpdate'] = ' ')
你确实意识到这会检查“空格”而不是if($row['giventoatpdate'] = '')
来检查它是否为“空”。
你也是“分配”而不是在这里进行“比较”,应该是:
if($row['giventoatpdate'] == '')
如果你正在检查空虚,那么删除那里的空间,或者你可以
if(empty($row['giventoatpdate']))
参考文献:
答案 1 :(得分:1)
INSERT没有WHERE运算符。 您需要将查询更改为以下内容:
UPDATE myTable SET my_field = :new_value WHERE my_another_filed = :another_value_or_row_id