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

Posted

技术标签:

【中文标题】WHERE子句MySQL中的PHP字符串变量【英文标题】:PHP string variable in WHERE clause MySQL 【发布时间】:2013-03-19 01:06:19 【问题描述】:

我遇到了这个简单的 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'";

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

【问题讨论】:

Please, don't use mysql_* functions in new code。它们不再维护and are officially deprecated。看到red box?改为了解 prepared statements,并使用 PDO 或 MySQLi - this article 将帮助您决定哪个。 【参考方案1】:

因为引号之间有多余的空格,所以没有日期,

$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,您可以摆脱在值周围使用单引号。

How to prevent SQL injection in PHP?

【讨论】:

感谢您的回答!我也试过中间没有空格,但我仍然没有数据。 发布这个echo $query_getShows;的结果 你甚至不应该考虑使用这种方法,@Akis,使用准备好的语句真的很容易,但它对系统很关键。 这是我从 echo $query_getShows 中得到的; SELECT * FROM toho_shows WHERE toho_shows.show ='gothaf' 虽然我在 Dreamweaver 中测试 SQL 语句时仍然没有得到任何数据。 好的,伙计们!这东西居然有效,不知道为什么dreamweaver在sql语句测试上没有返回任何数据!谢谢大家! @Jonast92 我会考虑你所说的准备好的陈述!谢谢!

以上是关于WHERE子句MySQL中的PHP字符串变量的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串变量传递给动态sql中的where子句

简单选择语句的where子句中的MySQL未知列

HANA - 将字符串变量传递到 SQL 脚本中的 WHERE IN() 子句

使用来自存储参数的输入参数作为 MySQL where 子句中的变量

使用 PHP 我试图拆分一个字符串来构建一个 SQL 搜索的 where 子句

PHP MySQL Where 子句