从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
我可以看到正在传递正确的数据,但语法错误。有人可以帮忙吗?
答案 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')";
变量是一个字符串,因此必须用单引号括起来。 这应该适合你。