提问人:BarbaraRoseNow 提问时间:10/28/2018 最后编辑:BarbaraRoseNow 更新时间:10/29/2018 访问量:52
如果PHP不应该在单引号的字符串内读取,那么为什么它在mysqli_query()中用单引号替换变量值呢?
If PHP isn't supposed to read inside single quoted strings, so why does it substitute variable values in single quotes in mysqli_query()?
问:
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会违反“单括号不解析规则”和/或“双括号被解析”规则?
谢谢:)
答:
2赞
Jonathon Reinhart
10/28/2018
#1
PHP 不会扩展 (PHP) 单引号字符串内的变量。您所拥有的是双引号字符串文本中的单引号,其中它们的处理方式与任何其他字符没有什么不同。
此外,不要对 SQL 查询使用这样的变量替换。使用预准备语句。您容易受到 SQL 注入的攻击。
评论
0赞
BarbaraRoseNow
11/11/2018
因此,PHP 解析嵌套引号的方式与解析嵌套引号的方式不同,例如,使用括号时,情况并非如此,其中解析是一致的,并且会持续到任何嵌套深度。这似乎打破了PHP从不查看单括号的规则,并且应该在PHP手册中注明,但至少现在它在这里供其他人找到。我在网上花了很多时间,可以说除了现在可供其他人使用的这篇文章之外,网上没有容易找到这种不一致的提及。
评论
mysqli()