我想写一个MySQL查询是这样的:使用MySQL的PHP变量LIKE
SELECT * FROM书籍,其中标题像 '$ title_';
The $ title是一个php变量。当我运行上面的查询,它抛出一个错误说
“未找到$ title_变量”
我怎样才能做到这一点?
谢谢..
我想写一个MySQL查询是这样的:使用MySQL的PHP变量LIKE
SELECT * FROM书籍,其中标题像 '$ title_';
The $ title是一个php变量。当我运行上面的查询,它抛出一个错误说
“未找到$ title_变量”
我怎样才能做到这一点?
谢谢..
做这样的:
$query = "select * from books where title like '{$title}_';"
$result = mysql_query($query) or die(mysql_error());
通过围绕{}
变量,你可以指定只$title
是一个变量,而不是_
。而双引号字符串将确保这个变量被扩展到它的值。
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)."_'";
但根据逸出背景下,你想从保护什么其他的变种。
-1:'addslashes'通常[并不是一个好主意](http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string)...糟糕的转义是更糟的是没有逃脱(因为你认为你不安全时)...... – ircmaxell 2010-08-30 20:54:13
@ircmaxell:如果我没有处理用户输入,但与控制的数据,如我建议的那样,这不是一个问题。在这种情况下,addslashes已经足够好了(就像我建议的那样在输入中保护原始引号)。对于用户输入,在考虑在某些SQL请求中使用它们之前,通常需要应用更多的处理方法。我一直认为只是保护输入和不小心混淆了utf-8和数据库中的各种代码页,这种想法非常疯狂(即使实际上很普遍)。 – kriss 2010-08-30 23:06:38
你有一个变量$ title_还是只是$ title?
如果它只是$名号:
$query = "select * from books where title like '".$title."_'";
下划线是'LIKE'的一部分,它应该匹配任何单个字符。所以:'$ query =“select * from book where title like''。$ title。”'_“;' – FrustratedWithFormsDesigner 2010-08-30 19:45:31
您的查询字符串必须是这样的:
$query = "select * from books where title like '".$title."_'";
请注意,'".$title."_'
你所得到的错误是因为你的查询正在采取$title
而不是您的php变量的值$title
尝试:
"select * from books where title like '{$title}_';"
大括号先计算变量,后来你的通配符_
添加到变量的值,从而提供SQL查询与搜索条件。
$ query =“select * from book where title like'”。 $ title_。“'”;
$ query =“SELECT * FROM books WHERE title LIKE'”。$ title。“_';”;
用途:
"... WHERE title LIKE '". mysql_escape_real_string($title) ."_'";
你可以使用:
WHERE title LIKE '{$title}_'";
+1是迄今为止唯一的答案,用于解决转义问题... – ircmaxell 2010-08-30 19:53:06
感谢shamittomar – jest 2010-08-30 19:45:43
不客气。 – shamittomar 2010-08-30 19:46:38
我想补充一点:在查询中不要使用像这样的变量。不再。至少如果您必须这样做,请使用Pdo :: quote方法,但请查看pdo :: prepare! – twicejr 2017-07-11 18:44:56