2

CakePHP を使用してデータベースにデータを保存する前に、mysql-real-escape-string を使用して入力をサナタイズしようとしています。そして、次のエラーが表示されます

mysql_real_escape_string() [function.mysql-real-escape-string]: ユーザー 'nobody'@'localhost' のアクセスが拒否されました (パスワードを使用: NO)

私のコード:

public function admin_videos($id = null) {
        if(!($this->isLogged() && $this->isAuthorized())) {
            $this->redirect(array('controller' => 'users', 'action' => 'login', 'admin' => true));
        }
        if ($this->request->is('post')) {
            $this->request->data['MovieVideo']['video'] = mysql_real_escape_string($this->request->data['MovieVideo']['video']);
            $this->request->data['MovieTrailer']['video'] = mysql_real_escape_string($this->request->data['MovieTrailer']['video']);
            if ($this->Movie->saveAll($this->request->data)) {
                $this->Session->setFlash('The movie has been saved', 'admin/flash_success');
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash('The movie could not be saved. Please, try again.', 'admin/flash_error');
            }
        } else {
          $this->request->data = $this->Movie->find('first', array('conditions' => array('Movie.id' => $id), 'contain' => array('MovieTrailer', 'MovieVideo')));
        }
    }
4

4 に答える 4

5

ドキュメントから:

生の SQL の代わりに、CakePHP の ORM メソッド (find() や save() など) と適切な配列表記 (つまり、array('field' => $value)) を使用すると、CakePHP はすでに SQL インジェクションから保護します。

したがって、手動で呼び出すことは忘れてくださいmysql_real_escape_string()

于 2012-05-24T07:01:04.307 に答える
2

mysql db に接続していないと思います。正しい認証情報で mysql_connect() と mysql_select_db() を試してください

于 2012-05-24T07:01:16.400 に答える
1

Sanitize::escape()CakePHP 2.x または CakePHP 3.x 用に手動で作成された複雑なクエリの場合

    $connection = ConnectionManager::get('default');
    $clean_string = $connection->quote('dirty"string--%/\');
于 2015-11-25T16:34:42.950 に答える
1

mysql_real_escape_string() は、すでに接続を開いている場合を除き、2 番目のパラメーターとしてデータベースへの接続を必要とします: http://php.net/manual/en/function.mysql-real-escape-string.php

次のいずれかを試すことができます。

  • mysql_escape_string を使用してみてください (現在は廃止されています)
  • PDO に切り替えて、引用機能を使用します ( http://uk3.php.net/manual/en/pdo.quote.php )
  • 最初にデータベースへの接続を初期化し、その接続を mysql_real_escape_string に渡します

一般的には PDO を使用することをお勧めします。PDO の方が OO より優れており、mysql_* 関数よりもサポートされているからです。

于 2012-05-24T07:42:11.357 に答える