表示されているものが表示されている理由は、クエリに二重引用符で囲まれた文字列を使用しているためです。PHP では、一重引用符の文字列は PHP によって解釈されます。したがって、あなたの場合、PHP はクエリを読み取り、 variable を確認します$KHiiru4yzYh141GUh2xIMew
。
この変数は明らかに設定されることはなく、吸うと通知が表示されます。
Notice: 未定義変数: KHiiru4yzYh141GUh2xIMew in...
結果はnull
(変数が設定されていないため)になります。
PHP が文字列を読み取る方法については、この説明ページを参照してください。
なぜ他の$
変数が変数として解釈されないのかという質問に答えましょう。これは、PHP 変数が数字で始まらないことに関係しています。したがって、PHP$2
は決して変数にならないことを知っています。
PHP で有効な変数名は次のようになります。
[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
ただし、PHP で変数を数字で開始する方法があります。${'2a'} = 'foo';
したがって、コードを修正するには 4 つの選択肢があります。
一重引用符を使用する
'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,
]);
オプション 4 が優先されます。