我看过其他类似的问题,但似乎无法找到解决方案。任何帮助,将不胜感激。
运行时,显示状态错误。我试图更新现有记录,当我点击提交时,会发生以下错误。
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;
答案 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)