PHPバージョン5.3を使用していて、コードでmysql_real_escape_string($unescaped_string)
を使用しようとしていますが、エラーが発生します。
Fatal error: Call to undefined function mysql_real_escape_string()
in /var/www/engine/database.php on line 38
ただし、データベースに接続することはできます。なぜそれが利用できないのですか?
私はPHPバージョン5.3を使用しています。
Updatecomment で述べたように、_mysql_
_は になりました5.5 以降非推奨:
Mysql拡張は、PHP 5.5から廃止されました。代わりにmysqliまたはPDO拡張を使用する必要があります。非推奨は mysql_deprecation で決定されました。ここで、この決定の背後にある理由の議論を見つけることができます。
およびPHP 7で削除されました。).
mysql_real_escape_string()
は MySQL関数 "batch" の標準部分であり、拡張機能が正しく読み込まれていれば常に機能するはずです。
別の_mysql_
_関数は機能しますか? (すべきではない)
_php.ini
_でこの行のコメントが解除されていることを確認してください:
_extension=mysql.so
_
また、代わりに mysqli
または PDO
を使用することをお勧めします( _mysql_
_は非推奨です )。どちらもエスケープを処理できます。
私の場合、mysqli_real_escape_string
の代わりに mysql_real_escape_string
。
興味深いことに、ここで他のすべてのソリューションを調査した後、問題は実際にはphp5-mysql
拡張機能はまだインストールされていません-新しいphpをインストールしても、Ubuntuにはデフォルトではインストールされません。したがって、私にとっての解決策は、php5-mysql拡張機能をインストールすることです。
Sudo apt-get install php5-mysql
この後、私はこれらの厄介なmysql_ *エラーを再度取得しませんでした;-)
多分あなたの問題はphpサーバーの設定(コンパイル)にあるでしょう。
Mysql_real_escape_stringに関する詳細情報は次のとおりです。 http://www.php.net/manual/en/function.mysql-real-escape-string.php
PHP 5.5。mysql_real_escape_string()は、PHP 7.では使用できません。これは、ユーザー入力を正しくエスケープできず、コードを離れることを意味します。 SQLインジェクション攻撃に対してオープンです。
PHPの公式ソリューションは、 ext/mysqlをMySQLi、PDOに置き換える またはその他のサポートされているデータベース拡張です。
SQLインジェクション攻撃を防ぐために、データベースと通信するときに 準備されたステートメントとパラメーター化されたクエリ を使用することをお勧めします。