使用PHP的SQL语句问题

时间:2009-05-22 00:41:14

标签: php mysql

我目前正在尝试使用PHP从MYSQL中提取数据,并且我不断收到以下错误:

“无法检索记录:您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以便在'%PC4198%或oem LIKE%Fluke%'附近使用正确的语法第1行“

我的SQL语句如下:

$sql = "SELECT * FROM account WHERE `NSC ID` LIKE %".$nscid."% OR oem LIKE %".$oem."%";

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:10)

应引用您的字符串:

$sql = "SELECT * FROM account WHERE NSC ID LIKE '%".$nscid."%' OR oem LIKE '%".$oem."%'";

那就是说,你应该考虑使用PDO或ORM。

编辑:

正如比尔所说,使用PDO的主要目的是防止SQL注入(由于可能将脏字符串连接到SQL中而导致)。

PDO风格的同一查询是:

$query = $connection->prepare('SELECT * FROM account WHERE NSCID LIKE :nscid OR oem LIKE :orm');
$query->bindValue(':nscid', '%'.$nscid.'%', PDO::PARAM_STR);
$query->bindValue(':oem', '%'.$oem.'%', PDO::PARAM_STR);

这是一些更多的代码,但是通过让库进行转义,它可以保护你免受大多数(所有?)SQL注入的攻击。<​​/ p>

(bindValue的参数类型是可选的,但是很好的做法。)

答案 1 :(得分:1)

更好的是,运营商{和}可以让你这样做

$sql="SELECT * FROM account WHERE NSC ID Like '%{$nscid}%' OR oem LIKE '%{$oem}%'";

你不需要{}如果只有一个这样的var,但如果你使用一个对象,你需要它们:

$hi_example="yarg i am a {$person->type}";