web-dev-qa-db-ja.com

PHP WHERE句の文字列変数MySQL

この単純なSQLクエリに問題があります。

<?php 
require_once('../../Connections/tohoshows.php'); 

$show ='gothaf';

mysql_select_db($database_tohoshows, $tohoshows);
$query_getShows = "SELECT * FROM toho_shows WHERE toho_shows.show =' ". $show. " '";
$getShows = mysql_query($query_getShows, $tohoshows) or die(mysql_error());
$row_getShows = mysql_fetch_assoc($getShows);
$totalRows_getShows = mysql_num_rows($getShows);

mysql_free_result($getShows);
?>

このようにWHERE句で文字列を直接使用すると

 $query_getShows = "SELECT * FROM toho_shows WHERE toho_shows.show ='gothaf'";

結果が出ます。代わりに変数を使用すると、データがありません!私は初心者なので、何が悪いのか分かりません。任意の助けいただければ幸いです。ありがとうございました!

引用符の間に余分なスペースがあるため、日付を取得できません。

$query_getShows = "SELECT * FROM toho_shows WHERE toho_shows.show =' ". $show. " '";
                                                                    ^ HERE      ^

これは次に解析されます

SELECT * FROM toho_shows WHERE toho_shows.show =' gothaf '

それを削除すると動作します

$query_getShows = "SELECT * FROM toho_shows WHERE toho_shows.show ='". $show. "'";

補足として、クエリは SQL Injection 変数の値(s)が外部からのものである場合。それを防ぐ方法については、以下の記事をご覧ください。 PreparedStatementsを使用すると、値を単一引用符で囲む必要がなくなります。

19
John Woo