1064错误,不确定问题是什么

时间:2016-02-02 15:53:35

标签: php mysql

提交时我一直收到此错误。我已经检查了我的表格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>
        ";
    }

其他一切都很好。当我点击提交时,它会给我这个错误。

2 个答案:

答案 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