从MySQL删除时出现SQL错误

时间:2012-04-26 13:48:55

标签: php sql syntax pdo

从SQL数据中删除数据时遇到问题。我尝试了各种版本的声明,但无济于事。以下是我提出的错误以及我正在使用的声明。

$sql = "DELETE FROM `saved_holidays` WHERE (subscriberID= $user AND title= $check_value)";

//connect to database then execute the SQL statement.
$db->exec($sql);

,错误信息为:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an
error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near '@xml119.com AND
title= Luxurious Jamaican holidays | 40% Discount On Accommodati' at
line 1

我可以看到正在传递正确的数据,但语法错误。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

$check_value是一个字符串,因此您必须将'括在查询中,如下所示:

title = '$check_value'

出于安全考虑,您还应该对所有字符串参数使用mysql_real_escape_string。或者甚至更好,使用准备好的陈述:http://php.net/manual/en/pdo.prepared-statements.php

答案 1 :(得分:1)

您需要在变量周围加上引号。它不喜欢空格。

根据您使用的服务器(MySQL或MSSQL),您必须使用反引号,单引号或双引号:

DELETE FROM saved_holidays WHERE (subscriberID="$user" AND title="$check_value")

此外,如果您使用的是PDO,则应考虑使用预准备语句:

$statment = $conn->prepare("DELETE FORM saved_holidays WHERE (subscriberID=? AND title=?)"); //$conn has to be your connection ceated by doing new PDO(...connection string...)
$statment->execute(array($user, $check_value));

答案 2 :(得分:0)

Amit是正确的,你的陈述应该是这样的;

$sql = "DELETE FROM `saved_holidays` WHERE (subscriberID= '$user' AND title= '$check_value')";

变量是一个字符串,因此必须用单引号括起来。 这应该适合你。