关于“”的php mysql查询语法问题

时间:2009-11-01 11:02:54

标签: php mysql string syntax

原谅我,我是初学者。以下代码返回一个解析错误:

$query = "INSERT INTO scenario_needgames VALUES ("$id", "Battle of the Bulge")";

phpMyAdmin中的查询构建器为我提供了这个稍微修改过的字符串:

$query = "INSERT INTO scenario_needgames VALUES (\"$id\" , \"Battle of the Bulge\");";

但我很困惑,为什么引号需要在它们实际上是查询语法的一部分时被转义,而不是 - 比如说 - 标题或字符串的一部分?我正在学习的入门书不包括那些简单的字符串。

$ id值是7位数,4个字母,然后是3个数字,如果你很好奇。

谢谢。

3 个答案:

答案 0 :(得分:3)

双引号需要在双引号字符串中转义,或者你可以使用单引号字符串而不必转义双引号,但是你不能直接插入变量,你必须使用串联:

$query = 'INSERT INTO scenario_needgames VALUES ("' . $id . '", "Battle of the Bulge")';

或者,只需用单引号替换内部双引号:

$query = "INSERT INTO scenario_needgames VALUES ('$id', 'Battle of the Bulge')";

我建议使用mysql_real_escape_string来正确安全地引用字符串。您可能还想查看使用预准备语句而不是PDOmysqli

答案 1 :(得分:3)

由于PHP而不是MySQL,它们正在逃避。您必须转义“字符输入” - “字符串因为”字符可以解释为字符串的结尾。

查看答案中的代码着色。第一个字符串被错误地着色:“和”中的部分被着色为代码,而不是字符串

答案 2 :(得分:2)

这是返回解析错误的PHP。

从PHP的角度来看,字符串是由引号分隔的字符序列。一个在开始,一个在结束。

如果要在字符串中添加引号,则需要转义它们,因此PHP知道内部引号不是字符串的结尾。

除非你逃避它们,否则PHP将返回一个解析错误,因为你分配给$query的东西不是一个有效的字符串(每一端都有一个引号)