PHP/MySQL Webアプリケーションでデータベースへの接続に問題が発生した問題のトラブルシューティングに時間を費やしました。データベースには、まったく同じ資格情報でシェルとphpMyAdminからアクセスできますが、意味がありませんでした。
パスワードに$記号が含まれていたことがわかります。
$_DB["password"] = "mypas$Word";
送信されたパスワードは「mypas」であり、明らかに間違っています。
この問題を処理する最良の方法は何ですか? \で$をエスケープしました
$_DB["password"] = "mypas\$Word";
そしてそれは働いた。
私は通常$string = 'test'
文字列の場合、これはおそらく以前にこれにぶつかることを避けた方法です。
これは正しい動作ですか?このパスワードがデータベースに保存されていて、PHP引き出した場合-この同じ問題が発生しますか?.
$_DB['password'] = 'mypas$Word';
単一引用符の文字列は処理されず、「そのまま」使用されます。 $ variableまたはエスケープシーケンス(\ n、\ rなど)の置換が特に必要でない限り、常に単一引用符の文字列を使用する必要があります。より高速でエラーが発生しにくくなります。
PHPは、変数$Word
を文字列mypas$Word
に補間しています。これは、二重引用符で囲まれた文字列リテラルの通常の動作です。 $Word
はおそらく未定義なので、結果の補間された文字列はmypas
です。
解決策は、単一引用符を使用することです。単一引用符で囲まれた文字列リテラルは、変数補間を受けません。
他の回答は、パスソードに単一引用符が埋め込まれるまですべて機能します。
不合格:
$_DB['password'] = 'my'pas$Word';
代替案:
他のエスケープ文字がない場合は、\$
で$をエスケープできます。
$_DB['password'] = "my'pas\$Word";
または、単一引用符をエスケープする方が簡単な場合があります。
$_DB['password'] = 'my\'pas$Word';
単一引用符で囲まれた文字列に入れてください:
$_DB['password'] = 'mypas$Word';
二重引用符で囲まれた文字列は変数を補間しますが、単一引用符で囲まれた文字列は補間しません。これで問題が解決します。
一重引用符を使用する
$_DB["password"] = 'mypas$Word';
"の代わりに単一引用符 'を使用するだけで、$ Wordを変数として扱わないようにします。
$_DB['password'] = 'mypas$Word';
二重引用符付きの文字列引用符は、変数に対して解釈されます。一重引用符で囲まれた文字列は、文字どおりに解釈されます。
$a = "one";
$b = "$a";
echo $b . "\n";
$b = '$a';
echo $b . "\n";
これにより、次の結果が得られます。
one
$a
このスレッドを見つける前に、この問題に出くわして修正しました。単一引用符で囲まれたすべてのソリューションが完璧に機能すると確信しています。パスを連結することを選択しましたが、シングルクォートの解決策を知らなかったので、パスも正常に機能します.... IE
$db_password = "SamWise" . "$" . "GangiTYloYG";