如果php不应该在单引号字符串中读取,那么为什么它要在mysqli\u query()中用单引号替换变量值呢?

5tmbdcev  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(287)

php不应该在单引号和双引号之间的字符串中查找。然而,在mysqli查询字符串中,我将变量放在单引号的值列表中,它是有效的——值从输入表单传输到xampp中的mysql中。这意味着它必须在单引号内进行窥视,以便识别那里有一个变量,并在mysqli query value部分中替换值,这不应该是这种情况。
我原以为只有包含变量的双圆括号会被替换到查询中,但事实恰恰相反——它们不起作用!我被迫将它们转换回单引号,这不应该起作用,但可以。
例如,mysql query values部分中的所有php变量以前都是从input 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违反了“单圆括号未解析规则”和/或“双圆括号已解析”规则?
谢谢:)

kiz8lqtg

kiz8lqtg1#

php不会在(php)单引号字符串中展开变量。你所拥有的是双引号字符串文字中的单引号,在这里它们与任何其他字符没有区别。
另外,不要像这样对sql查询使用变量替换。使用事先准备好的陈述。你很容易受到sql注入的攻击。

相关问题