WHERE子句MySQL中的PHP字符串变量

Aki*_*los 10 php mysql sql select

我有这个简单的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);
?>
Run Code Online (Sandbox Code Playgroud)

当我在WHERE子句中直接使用字符串时,就像这样

 $query_getShows = "SELECT * FROM toho_shows WHERE toho_shows.show ='gothaf'";
Run Code Online (Sandbox Code Playgroud)

我得到了一个结果.当我使用变量时,我没有数据!我是新手,我无法弄清楚我做错了什么.任何帮助,将不胜感激.谢谢!

Joh*_*Woo 19

你没有约会,因为你的报价有额外的空间,

$query_getShows = "SELECT * FROM toho_shows WHERE toho_shows.show =' ". $show. " '";
                                                                    ^ HERE      ^
Run Code Online (Sandbox Code Playgroud)

然后将解析为

SELECT * FROM toho_shows WHERE toho_shows.show =' gothaf '
Run Code Online (Sandbox Code Playgroud)

删除它,它会工作

$query_getShows = "SELECT * FROM toho_shows WHERE toho_shows.show ='". $show. "'";
Run Code Online (Sandbox Code Playgroud)

作为一个旁注,查询是脆弱的SQL Injection,如果值(小号变量)从外面走了进来.请查看下面的文章,了解如何防止它.通过使用,PreparedStatements您可以摆脱使用值周围的单引号.