web-dev-qa-db-ja.com

mysql_real_escape_stringは未定義です

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を使用しています。

12
MichaelH

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__は非推奨です )。どちらもエスケープを処理できます。

18
Vyktor

私の場合、mysqli_real_escape_string の代わりに mysql_real_escape_string

3
speksy

興味深いことに、ここで他のすべてのソリューションを調査した後、問題は実際にはphp5-mysql拡張機能はまだインストールされていません-新しいphpをインストールしても、Ubuntuにはデフォルトではインストールされません。したがって、私にとっての解決策は、php5-mysql拡張機能をインストールすることです。

Sudo apt-get install php5-mysql

この後、私はこれらの厄介なmysql_ *エラーを再度取得しませんでした;-)

1
nemesisfixx

多分あなたの問題はphpサーバーの設定(コンパイル)にあるでしょう。

Mysql_real_escape_stringに関する詳細情報は次のとおりです。 http://www.php.net/manual/en/function.mysql-real-escape-string.php

0
shinosn

PHP 5.5。mysql_real_escape_string()は、PHP 7.では使用できません。これは、ユーザー入力を正しくエスケープできず、コードを離れることを意味します。 SQLインジェクション攻撃に対してオープンです。

PHPの公式ソリューションは、 ext/mysqlをMySQLi、PDOに置き換える またはその他のサポートされているデータベース拡張です。

SQLインジェクション攻撃を防ぐために、データベースと通信するときに 準備されたステートメントとパラメーター化されたクエリ を使用することをお勧めします。

0