无法删除MySQL DB条目

时间:2012-03-31 02:08:40

标签: php mysql

这是我第一次在MySQL中设置数据库并使用它们,所以我很感激任何帮助,因为我的在线搜索时间没有帮助我解决这个错误。

我的数据库中基本上有一个表。 飞机场: Title-3 Char&公钥 AirportName- 100 Char&不为空

我已经在php中编写了一个网页,应该允许我删除我的条目,具体取决于我选择的那个。

简而言之,这是我的php:

 $result = mysql_query("DELETE FROM airport WHERE Title=$Title")
 or die(mysql_error()); 

它给了我这个错误:

Unknown column 'ABC' in 'where clause'

如果我在phpmyadmin中运行它:

DELETE FROM airport WHERE Title=ABC

它给了我这个错误:

Unknown column 'ABC' in 'where clause'

如果我在phpmyadmin中运行它,它可以工作:

DELETE FROM airport WHERE Title="ABC"

但如果我在我的PHP代码中添加引号,页面就会死掉。有什么指针吗?

5 个答案:

答案 0 :(得分:1)

您需要使用ABC

引用'ABC'

答案 1 :(得分:1)

因为你的db的title字段是varchar,所以用单引号更好地编码$ title并使用mysql_real_escape_string来清理不安全的数据库字符。 像:

$result = mysql_query(sprintf("delete from airport where title = '%s'", mysql_real_escape_string($title));

答案 2 :(得分:1)

如果你不想使用,你也可以逃脱 此外,您应该清理查询中使用的所有变量。

$Title = mysql_real_escape_string($Title);
$result = mysql_query("DELETE FROM airport WHERE Title=\"$Title\"");

答案 3 :(得分:1)

你错过了引号:

$result = mysql_query("DELETE FROM airport WHERE Title='$Title'")

您可以使用第三部分课程,或PDO

答案 4 :(得分:1)

当您只是使用双引号时PHP不处理它的原因是因为您使用它们来启动字符串。这意味着你也有效地结束了字符串,因此在第二个引号后引起了一些无法识别的代码。

要解决此问题,您可以使用反斜杠转义字符串引号,因此您的代码将类似于

$result = mysql_query("DELETE FROM airport WHERE Title=\"$Title\"")
or die(mysql_error());

或使用单引号

$result = mysql_query("DELETE FROM airport WHERE Title='$Title'")
or die(mysql_error());

这也将解决您发生的MySQL错误,因为您发送的字符串没有引号。这导致MySQL将其用作列名,而是尝试将列中的任何内容添加到$ Title中,在这种情况下,将ABC放入指定的列中,标题。

此外,您应该更好地清理您的输入,因为发送一个未转义为MySQL的字符串在大多数情况下容易受到黑客攻击。让黑客或多或少地完全控制您的数据库。

你可以使用mysql_real_escape_string()或者使用PDO或mysqli的prepeared查询(这也是很多其他原因,特别是因为它使你的代码更容易阅读)。

$Title = mysql_real_escape_string($Title);
$result = mysql_query("DELETE FROM airport WHERE Title='$Title'")
or die(mysql_error());