0

セキュリティ機能はあるが使用に問題がある - MySQLi

私はこの機能を使用しますsecure

function secure ($string) {
  $string = htmlspecialchars($string);
  $string = strip_tags($string);
  $string = stripcslashes($string);
  $string = $mysqli -> real_escape_string($string);
  return $string;}

問題は私にはエラーのようです:

致命的なエラー: 非オブジェクトでメンバー関数 real_escape_string() を呼び出しています

ありがとうございました!

4

3 に答える 3

0

関数を機能させたい場合は、 $mysqli オブジェクトを引数として渡す必要があります

このような:

function secure ($string,$mysqli) {
  $string = htmlspecialchars($string);
  $string = strip_tags($string);
  $string = stripcslashes($string);
  $string = $mysqli -> real_escape_string($string);
  return $string;}

この関数を使用しないでください。

1- オーバーキルで間違った @Dagon のコメントです。(同意)
2- mysqli を使用しているのに、準備済みステートメントを使用できるのに、なぜこれを行うのですか? @barmar のコメント。(同意)
3- データベースに入れるときは htmlspecialchars() を使用しないでください。@bamar コメントをレンダリングするときは htmlentities() を使用する必要があります。(同意)

上記は私にとって使用しない主な理由です


代わりに、マニュアルの例である Prepare Staments を使用できます

/* create a prepared statement */
$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?");

/* bind parameters for markers */
$stmt->bind_param("s", $city);

/* execute query */
$stmt->execute();

/* bind result variables */
$stmt->bind_result($district);

/* fetch value */
$stmt->fetch();

printf("%s is in district %s\n", $city, $district);

/* close statement */
$stmt->close();
于 2013-09-19T23:56:43.220 に答える
0

外部データから SQL ステートメントを作成できるように、入力をサニタイズする方法について質問するのはなぜですか? 外部データから SQL ステートメントを作成するのは危険です。

どうすれば中途半端な「解決策」を思いつくことができるかを心配して時間を無駄にするのではなく、立ち止まって Big Programmer Pants を着て、準備されたステートメントとバインドされた変数を使い始めてください。

これがあなたを始める素晴らしい答えです:PHPでSQLインジェクションを防ぐにはどうすればよいですか?

http://bobby-tables.com/phpで他の例を確認することもできます。

Oracleで準備済みステートメントとバインドされた変数を引き続き実行できるように見えます:http: //php.net/manual/en/function.oci-bind-by-name.phpまたはPDO http://php.net/を介してmanual/en/pdostatement.bindparam.php

于 2013-09-20T00:02:08.270 に答える