我目前正在尝试使用PHP从MYSQL中提取数据,并且我不断收到以下错误:
“无法检索记录:您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以便在'%PC4198%或oem LIKE%Fluke%'附近使用正确的语法第1行“
我的SQL语句如下:
$sql = "SELECT * FROM account WHERE `NSC ID` LIKE %".$nscid."% OR oem LIKE %".$oem."%";
非常感谢任何帮助。
答案 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}";