关门了。这个问题是不可重现或由拼写错误引起..。它目前不接受答案。
想要改进这个问题吗?
更新问题,使其成为on-topic堆栈溢出。
去年就关门了。
为什么此代码会产生错误
$sql = "INSERT INTO accountlist VALUES (\"\", \"$user\", \"$pwd\", \"$mail\", \"$date\")";
这个不是吗?
$sql = "INSERT INTO accountlist VALUES ('', '$user', '$pwd', '$mail', '$date')";
我知道双引号处理变量,而单引号不是,所以第一个选项应该是正确的,但它正好相反!
发布于 2020-02-13 20:10:55
为了回答你的问题,而不是继续谈论查询参数...
https://www.php.net/manual/en/language.types.string.php解释在带引号的字符串中使用引号字符的机制。
基本上,如果您的PHP字符串由"
,然后下一个"
字符是字符串的结尾。
但是,您可能希望在字符串内使用文字双引号字符,而不是结束字符串。为此,您可以在其前面放置一个反斜杠,如下所示:
$sql = "INSERT INTO accountlist VALUES (\"\", \"$user\", \"$pwd\", \"$mail\", \"$date\")";
然后,带反斜杠的双引号字符将成为字符串内容的一部分,而不是字符串末尾的分隔符。
但是,双引号字符串中的单引号字符不会导致同样的歧义,因此它们不需要反斜杠。因此,下面的代码工作正常,不会出现错误:
$sql = "INSERT INTO accountlist VALUES ('', '$user', '$pwd', '$mail', '$date')";
解析器可以断定单引号不是它要用来结束双引号字符串的字符。因此,这些单引号被解析为文字字符。
这在许多其他编程语言中都是以相同的方式工作的,
像Java、C、C++、Ruby、Python、Perl,甚至是SQL本身。
这就是为什么有些人听起来很不耐烦,因为你问了这个问题。这是一个非常初级的问题,表明您对编程语言的阅读还不够,您希望社区为您提供个性化的辅导,以了解您应该自己掌握的概念。
发布于 2020-02-13 18:55:10
发布于 2020-02-13 19:58:37
他们所说的就是金钱上的死路一条..。而且也相当容易!
您的查询将变为:
INSERT INTO accountlist VALUES ("", ?, ?, ?, ?)
The The The?
符号(请注意,这些符号没有用引号括起来)是
参数。
现在,每次执行查询时,都会提供一个数组其中包含四个值,将在语句中从左到右替换。这些值可以是任何值,您不必关心引号之类的东西,因为它们不是SQL的一部分。相反,参数是输入。
如果你不得不做“一大堆这样的事情”,比如说几千或几百万次,你
准备语句只执行一次,然后根据需要多次执行准备好的语句,每次都提供不同的值数组作为输入。
还有大量的库可以让你通过名称来指定参数,给出一个命名值的散列,例如
INSERT INTO accountlist VALUES ("", :user:, :pwd:, :mail:, :date:)
{ 'user' => 'fred', 'pwd' => 'secret', 'mail' => 'foo@bar.com', 'date' => today() }
..。库会将其转换为有效的SQL语句,如上图所示。
更安全,更少令人头疼的问题,而且效率也明显更高。
https://stackoverflow.com/questions/60214641
复制