我遇到这个简单的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'";
我得到了一个结果。当我使用变量时,我没有数据!我是新手,我无法弄清楚我做错了什么。任何帮助,将不胜感激。 谢谢!
答案 0 :(得分:19)
你没有约会,因为你在报价之间有额外的空间,
$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. "'";
作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号。