Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果PHP不是';不应该在单引号字符串中读取,那么为什么它要在mysqli_query()中替换单引号中的变量值呢?_Php_Mysql_Mysqli_Double_Quotes - Fatal编程技术网

如果PHP不是';不应该在单引号字符串中读取,那么为什么它要在mysqli_query()中替换单引号中的变量值呢?

如果PHP不是';不应该在单引号字符串中读取,那么为什么它要在mysqli_query()中替换单引号中的变量值呢?,php,mysql,mysqli,double,quotes,Php,Mysql,Mysqli,Double,Quotes,PHP不应该查看单引号与双引号之间的字符串。然而,在我的mysqli查询字符串中,我将变量放在单引号的值列表中,它的工作方式是:将值从输入表单传输到XAMPP中的mysql中。这意味着它必须在单引号内进行窥视,以便识别那里有一个变量,并在mysqli查询值部分中替换值,但情况不应该如此 我原以为只有包含变量的双括号会被替换到查询中,但事实恰恰相反——它们不起作用!我被迫将它们转换回单引号,这不应该起作用,但可以 例如,mysql查询值部分中的所有PHP变量之前都是从输入html表单中定义的,下面

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手册中加以说明,但至少现在其他人可以在这里找到它。我在网上花了很多时间,可以说,除了这篇文章现在可以提供给其他人之外,在网上很难找到关于这种不一致性的提及。