您看到所见内容的原因是因为您使用双引号字符串进行查询。在 PHP 中,单引号字符串由 PHP 解释。因此,在您的情况下发生的是 PHP 读取查询并看到一个变量$KHiiru4yzYh141GUh2xIMew
。
这个变量从来没有被明显设置过,因为糟糕会导致通知:
注意:未定义的变量:KHiiru4yzYh141GUh2xIMew in...
并且将导致null
(再次因为从未设置变量)。
要了解 PHP 如何读取字符串,请参阅此说明页面。
现在回答你的问题,为什么另一个$
不被解释为变量。这与 PHP 变量不以数字开头的事实有关。所以 PHP 知道$2
永远不可能是一个变量。
PHP 中的有效变量名称如下所示:
[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
不过,有一种方法可以让变量以 PHP 中的数字开头:${'2a'} = 'foo';
所以你有四种选择来修复你的代码:
使用单引号
'INSERT INTO su_auth (
AuthAlias, AuthUsername, AuthPass, AuthSessionID, AuthIP, AuthUserAgent
) VALUES (
\'Me\',
\'Myself\',
\'$2a$08$KHiiru4yzYh141GUh2xIMew//bCc7rxMuY1rtDApwA66/czIiurLi\',
NULL, NULL, NULL
)'
连接
"INSERT INTO su_auth (
AuthAlias, AuthUsername, AuthPass, AuthSessionID, AuthIP, AuthUserAgent
) VALUES (
'Me',
'Myself',
'". '$2a$08$KHiiru4yzYh141GUh2xIMew//bCc7rxMuY1rtDApwA66/czIiurLi' . "',
NULL, NULL, NULL
)"
冲刺
echo sprintf("INSERT INTO su_auth (AuthAlias, AuthUsername, AuthPass, AuthSessionID, AuthIP, AuthUserAgent) VALUES ('Me', 'Myself', '%s', null, null, null)", '$2a$08$KHiiru4yzYh141GUh2xIMew//bCc7rxMuY1rtDApwA66/czIiurLi');
你为什么在查询中直接使用你的数据???使用带有绑定参数的准备好的语句
$stmt = $connection->prepare('INSERT INTO su_auth (AuthAlias, AuthUsername, AuthPass, AuthSessionID, AuthIP, AuthUserAgent) VALUES (:AuthAlias, :AuthUsername, :AuthPass, :AuthSessionID, :AuthIP, :AuthUserAgent)');
$stmt->execute([
'AuthAlias' => 'Me',
'AuthUsername' => 'Myself',
'AuthPass' => '$2a$08$KHiiru4yzYh141GUh2xIMew//bCc7rxMuY1rtDApwA66/czIiurLi',
'AuthSessionID' => null,
'AuthIP' => null,
'AuthUserAgent' => null,
]);
选项四将是首选。