2017-07-29 6 views
-2

この映画の情報を掲載したいと思います。クエリがどんな結果を与えるdosn'tようmysqlのクエリ列でPHP関数を使用できますか?

$sql = "SELECT * FROM movies WHERE title LIKE '%".$_GET['search']."%'"; 

しかし$_GET['search']は、URL名のように変更されます。 タイトル欄にmodurl() php関数を使用できますか?

$sql = "SELECT * FROM movies WHERE modurl(title) LIKE '%".$_GET['search']."%'"; 
+2

SQLクエリではPHP関数を使用できません。 –

+2

MySQLに渡すことはできませんし、実行されると期待していますが、PHPで実行してからクエリの結果を使用することができます。しかし、あなたのコードは現在、[SQLインジェクション](https://en.wikipedia.org/wiki/SQL_injection)_に対して広く公開されています_ **。文字列を張り合わせてクエリを作成しないでください。代わりに[prepared statements](http://php.net/manual/en/pdo.prepare.php)と[パラメータバインディング](http://php.net/manual/en/pdostatement.bindparam.php)を使用してください。 。 – Chris

+2

'modurl()'とは何ですか? –

答えて

0

あなたがリシの回答に加えて[urldecode][1]

$sql = "SELECT * FROM movies WHERE modurl(title) LIKE '%".urldecode($_GET['search'])."%'"; 
0

を使用することができます:

が、私はこのような何か希望

をすることができますが、直接置くことはお勧めしませんSQLへのURLクエリ。 これにより、データベースにSQLインジェクションとセキュリティ上の脅威が与えられます。

代わりに、プリペアドステートメントとパラメータ化クエリを使用できます。

$title = urldecode($_GET['search']); 

$stmt = $pdo->prepare("SELECT * FROM movies WHERE title LIKE :title"); 
$stmt->execute(array('title' => $title)); 

foreach ($stmt as $row) { 
    // do something with $row 
} 

SQLインジェクションhereについて詳しく読むことができます。

関連する問題