php - 使用PHP的SQL语句问题

标签 php mysql

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

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

我的SQL语句如下:

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

非常感谢任何帮助。

最佳答案

你的字符串应该被引用:

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

也就是说,您真的应该考虑使用 PDO 或 ORM。

编辑:

正如 Bill 所说,使用 PDO 的主要目的是防止 SQL 注入(inject)(由将可能脏的字符串连接到 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 注入(inject)。

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

关于php - 使用PHP的SQL语句问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/895951/

相关文章:

php - 在添加 www 和删除 .php 后添加尾部斜杠

mysql - 通过数据库保存流媒体文件(视频或音频或两者)的方式及其效果

许多文件开头的 PHP —"Defined or Exit"?

php - 类似于 Campaign Monitor 的电子邮件模板编辑器

php - 带有函数图像绘制的 Zend pdf 错误

php - 如何将 mysqli 连接存储在单独的 php 文件中并在需要时调用它

mysql - 为什么MySQL在选项为O_DIRECT的情况下仍然使用fsync()来刷新数据?

MySQL 触发器 concat 与 curdate()

C# 从 DataGridView 插入 MySQL 数据后被截断

javascript - PHP 中的 jQuery/JavaScript 输出