2010-08-30 48 views
0

我想写一个MySQL查询是这样的:使用MySQL的PHP​​变量LIKE

SELECT * FROM书籍,其中标题像 '$ title_';

The $ title是一个php变量。当我运行上面的查询,它抛出一个错误说

“未找到$ title_变量”

我怎样才能做到这一点?

谢谢..

回答

4

做这样的:

$query = "select * from books where title like '{$title}_';" 
$result = mysql_query($query) or die(mysql_error()); 

通过围绕{}变量,你可以指定只$title是一个变量,而不是_。而双引号字符串将确保这个变量被扩展到它的值。

+1

感谢shamittomar – jest 2010-08-30 19:45:43

+0

不客气。 – shamittomar 2010-08-30 19:46:38

+0

我想补充一点:在查询中不要使用像这样的变量。不再。至少如果您必须这样做,请使用Pdo :: quote方法,但请查看pdo :: prepare! – twicejr 2017-07-11 18:44:56

-1

mysql查询只是一个字符串。你只需要把你的$ title php变量的值放在这个字符串中。问题在于这个字符串后面跟着一个字符下划线,这个字符在变量名中是有效的,因此您必须划定变量名或下划线将包含在名称中。

有几种方式做到这一点,对于为例:

$query = "select * from books where title like '${title}_'"; 
$query = "select * from books where title like '".$title."_'"; 

由于OMG小马说,如果$标题来自一些用户输入进来,而不是从你的程序的一些控制部分(适用于为例另一个表数据库),变量也应该受到保护,或者存在一些SQL注入攻击的风险(执行多个查询,更具体地说,一些黑客准备的查询是一些有效的SQL)。

除了攻击,如果你没有逃脱,还有一些其他潜在的问题。想象一下会发生什么,如果为例标题实际上包含了报价......

我通常会做:

$query = "select * from books where title like '".addslashes($title)."_'"; 

但根据逸出背景下,你想从保护什么其他的变种。

+0

-1:'addslashes'通常[并不是一个好主意](http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string)...糟糕的转义是更糟的是没有逃脱(因为你认为你不安全时)...... – ircmaxell 2010-08-30 20:54:13

+0

@ircmaxell:如果我没有处理用户输入,但与控制的数据,如我建议的那样,这不是一个问题。在这种情况下,addslashes已经足够好了(就像我建议的那样在输入中保护原始引号)。对于用户输入,在考虑在某些SQL请求中使用它们之前,通常需要应用更多的处理方法。我一直认为只是保护输入和不小心混淆了utf-8和数据库中的各种代码页,这种想法非常疯狂(即使实际上很普遍)。 – kriss 2010-08-30 23:06:38

0

你有一个变量$ title_还是只是$ title?

如果它只是$名号:

$query = "select * from books where title like '".$title."_'"; 
+0

下划线是'LIKE'的一部分,它应该匹配任何单个字符。所以:'$ query =“select * from book where title like''。$ title。”'_“;' – FrustratedWithFormsDesigner 2010-08-30 19:45:31

0

您的查询字符串必须是这样的:

$query = "select * from books where title like '".$title."_'"; 

请注意,'".$title."_'

你所得到的错误是因为你的查询正在采取$title而不是您的php变量的值$title

0

尝试:

"select * from books where title like '{$title}_';" 

大括号先计算变量,后来你的通配符_添加到变量的值,从而提供SQL查询与搜索条件。

0

$ query =“select * from book where title like'”。 $ title_。“'”;

0

$ query =“SELECT * FROM books WHERE title LIKE'”。$ title。“_';”;

8

用途:

"... WHERE title LIKE '". mysql_escape_real_string($title) ."_'"; 

你可以使用:

WHERE title LIKE '{$title}_'"; 

..但有一个risk of SQL Injection attacks

+0

+1是迄今为止唯一的答案,用于解决转义问题... – ircmaxell 2010-08-30 19:53:06