如果PHP不是';不应该在单引号字符串中读取,那么为什么它要在mysqli_query()中替换单引号中的变量值呢?
PHP不应该查看单引号与双引号之间的字符串。然而,在我的mysqli查询字符串中,我将变量放在单引号的值列表中,它的工作方式是:将值从输入表单传输到XAMPP中的mysql中。这意味着它必须在单引号内进行窥视,以便识别那里有一个变量,并在mysqli查询值部分中替换值,但情况不应该如此 我原以为只有包含变量的双括号会被替换到查询中,但事实恰恰相反——它们不起作用!我被迫将它们转换回单引号,这不应该起作用,但可以 例如,mysql查询值部分中的所有PHP变量之前都是从输入html表单中定义的,下面的代码完全有效,并将表单数据插入到我的数据库中:如果PHP不是';不应该在单引号字符串中读取,那么为什么它要在mysqli_query()中替换单引号中的变量值呢?,php,mysql,mysqli,double,quotes,Php,Mysql,Mysqli,Double,Quotes,PHP不应该查看单引号与双引号之间的字符串。然而,在我的mysqli查询字符串中,我将变量放在单引号的值列表中,它的工作方式是:将值从输入表单传输到XAMPP中的mysql中。这意味着它必须在单引号内进行窥视,以便识别那里有一个变量,并在mysqli查询值部分中替换值,但情况不应该如此 我原以为只有包含变量的双括号会被替换到查询中,但事实恰恰相反——它们不起作用!我被迫将它们转换回单引号,这不应该起作用,但可以 例如,mysql查询值部分中的所有PHP变量之前都是从输入html表单中定义的,下面
$host = 'localhost';
$user = 'root';
$pw = '';
$db = 'aliensdb';
$dbc = mysqli_connect($host, $user, $pw, $db);
$table = 'alien_abductions';
$query = "INSERT INTO $table (
first_name,
last_name,
when_it_happened,
how_long,
how_many,
alien_description,
what_they_did,
fang_spotted,
other,
email)
VALUES (
'$first_name',
'$last_name',
'$when_it_happened',
'$how_long',
'$how_many',
'$alien_description',
'$what_they_did',
'$fang_spotted',
'$other',
'$email'
)";
$result = mysqli_query($dbc, $query) or die('Error querying database.');
mysqli_close($dbc);
这样做有效,并且变量被成功地插入到值中,作为数据库中的新行,这违反了PHP的规则——或者是这样吗?在什么情况下,PHP违反了“单括号未解析规则”和/或“双括号已解析”规则
谢谢:)PHP不会在(PHP)单引号字符串中展开变量。您所拥有的是双引号字符串文字中的单引号,它们与任何其他字符都没有区别
另外,不要像这样对SQL查询使用变量替换。使用事先准备好的陈述。您很容易受到SQL注入的攻击。因为这些单引号位于双引号内。但永远不要这样做,使用参数。删除此“代码”并通过谷歌了解如何使用准备好的语句与
mysqli()
可能重复的内容,而不是“mickmackusa”提供的帖子/链接的重复内容上面-不处理这个问题中提出的问题。因此PHP解析嵌套引号的方式与解析非嵌套引号的方式不同,但情况并非如此,例如,使用括号,解析是一致的,并继续到任何嵌套深度。这似乎打破了PHP从不在单括号内查找的规则,应该在PHP手册中加以说明,但至少现在其他人可以在这里找到它。我在网上花了很多时间,可以说,除了这篇文章现在可以提供给其他人之外,在网上很难找到关于这种不一致性的提及。