SQL错误SQLSTATE [42000]:语法错误或访问冲突:1064

时间:2017-08-26 19:52:42

标签: php sql

我看过其他类似的问题,但似乎无法找到解决方案。任何帮助,将不胜感激。

运行时,显示状态错误。我试图更新现有记录,当我点击提交时,会发生以下错误。

  

SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在'附近使用。 Name =,Time =,Date =,Description =,Organizer =,Place =,Other_info =,Organ'在第1行



<?php
$servername = "localhost";
$username = "ilyasm2";
$password = "PASSWORD";
$dbname = "ilyasm2_db";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "UPDATE Event SET Event_category= $event_category, Name= $name, Time= $time, Date=$date, Description= $description, Organiser= $organiser, Place= $place, Other_info= $other_info, Organiser_email= $organiser_email, Your_Name= $your_name";

    // Prepare statement
    $stmt = $conn->prepare($sql);

    // execute the query
    $stmt->execute();

    // echo a message to say the UPDATE succeeded
    echo $stmt->rowCount() . " records UPDATED successfully";
    }
catch(PDOException $e)
    {
    echo $sql . "<br>" . $e->getMessage();
    }

$conn = null;
?> 
 
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

当PHP运行此行时:

$sql = "UPDATE Event SET Event_category= $event_category, Name= $name, Time= $time, Date=$date, Description= $description, Organiser= $organiser, Place= $place, Other_info= $other_info, Organiser_email= $organiser_email, Your_Name= $your_name";

它尝试解析每个字符串的值。字符串很可能不存在?因此PHP会发出警告(我假设)。 MySQL告诉你这个字符串已经提交:

UPDATE Event SET Event_category= , Name= , Time= , Date=, Description= , Organiser= , Place= , Other_info= , Organiser= Your_Name= 

这是一个无效的SQL语句。

永远不要在mysql语句中直接使用字符串(!)它可能会使你的代码容易受到SQL injections的攻击,但使用类似的东西:

$sql = 'SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour';

$sth = $dbh->prepare($sql);

$sth->execute(array(':calories' => 150, ':colour' => 'red'));

$red = $sth->fetchAll();

在这种情况下,PDO知道它必须用以下颜色替换:颜色&#39;红色&#39;和:&#39; 150&#39;卡路里。

注意:如果SQL语句中没有WHERE clausule,此查询将更新所有记录...如果您只有一条记录,那可能不是问题。但是对于性能,总是在primary key字段上使用where是明智的。 (例如Event_id)