2011-09-13 340 views
0

我有2个值,我正在补充我的脚本 - 我想搜索这些数据中的任何一个。我该如何写这样的查询:MySQL Select语句

SELECT * FROM table WHERE id = '".$id."' or "name='".$name."'; 

我的问题是转义查询中的引号。

任何帮助将不胜感激。

+0

编写PHP代码plz –

回答

0

你可以使用大括号,以避免转义字符混乱如下:

$query = "SELECT * FROM table WHERE id = '{$id}' or name = '{$name}' "; 

您也可以考虑在name字段使用通配符如%$letter%搜索词的任何地方:

$query = "SELECT * FROM table WHERE id = '{$id}' or name LIKE '%{$name}%' "; 

建议: 为了获得更好的性能,您应该始终使用id字段作为integer

+0

这是一个非常棒的解决方案 - 它拥有我需要的一切。太感谢了。 – Julie

+0

不客气。请喜欢你最喜欢的解决方案。这会鼓励我们回答尽可能多和相关的问题:) –

0

你有额外的报价;如果你要坚持你原来的代码(不推荐),尝试这样的事情:

$query = "SELECT * FROM table WHERE id = '".$id."' or name='".$name."'"; 

但真的是你应该使用参数化查询,以便您避免可能的SQL注入安全问题!

+0

谢谢你,我有一个代码可以逃脱提供的数据。好的解决方案BTW。 – Julie

2

有几个方法可以做到这一点,他们中的很多皱起了眉头,但一般来说,我会坚持使用库MySQLi和使用

mysqli_real_escape_string($id) 

功能或OOP

$mysqli = new mysqli('host', 'user', 'pass', 'database'); 
$id = $mysqli -> real_escape_string($id); 
$name = $mysqli -> real_escape_string($name); 
$results = $mysqli -> query("SELECT * FROM table WHERE id = '{$id}' or "name='{$name}'"); 
+0

您不需要'{}'将它们全部保留,所有工作都可以正常工作,如果您想包含函数结果,则只需要它们。 – Johan

+0

我把它们放进去,因为它们没有指定它是否是funtion的结果,如果它不是函数,它不会以任何方式停止连接。 –

+0

如果你打算使用MySQLi,为什么不使用准备好的语句? – Michael

0

写它作为:

$name = mysql_real_escape_string($name); 
$id = mysql_real_escape_string($id); 
$query = "SELECT * FROM table WHERE id = '$id' or name= '$name' "; 

因为你开始用双引号单引号是t的一部分他查询并且$ vars被扩展。