这是我第一次在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代码中添加引号,页面就会死掉。有什么指针吗?
答案 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)
答案 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());