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违反了“单圆括号未解析规则”和/或“双圆括号已解析”规则?
谢谢:)
1条答案
按热度按时间kiz8lqtg1#
php不会在(php)单引号字符串中展开变量。你所拥有的是双引号字符串文字中的单引号,在这里它们与任何其他字符没有区别。
另外,不要像这样对sql查询使用变量替换。使用事先准备好的陈述。你很容易受到sql注入的攻击。