-1

我写了一个查询

mysql_query("insert into db_manufacturer(mfgName) values('$manufacturer')"

何时$manufacturer = ram'ssam's等然后它给出sql错误,如何克服这个错误。如果我使用""then 在数据库中插入变量而不是变量值。

4

5 回答 5

2
 mysql_query("insert into db_manufacturer(mfgName) values('$manufacturer')")

什么时候$manufacturer"ram's"

 mysql_query("insert into db_manufacturer(mfgName) values('ram's')")

这被打破了,因为值结束分隔符出现了两次;也就是说,有奇数个单引号。

现在解决方案

mysql_query("
  INSERT INTO db_manufacturer
    (mfgName)
  VALUES
    ('".mysql_real_escape_string($manufacturer)."')
");

一个好的、简单、可扩展和安全的方法是使用参数化查询。此类查询的参数称为绑定变量。

好读

  1. 如何防止 PHP 中的 SQL 注入?
  2. PDO 准备好的语句是否足以防止 SQL 注入?

笔记

  1. 整个ext/mysqlPHP 扩展提供了所有以 mysql_ 为前缀的函数,从 PHP v5.5.0 开始正式弃用,并将在未来删除。所以使用PDO或者MySQLi

好读

  1. 不推荐使用 mysql 扩展并将在将来删除:请改用 mysqli 或 PDO
  2. MySQL 开发人员的 PDO 教程
  3. Pdo 初学者教程
于 2013-01-14T07:21:55.823 回答
1
$manufacturer = mysql_real_escape_string($manufacturer);
mysql_query("insert into db_manufacturer(mfgName) values('$manufacturer')";
于 2013-01-14T06:29:11.020 回答
1
$manufacturer = mysql_real_escape_string($manufacturer);
mysql_query("insert into db_manufacturer(mfgName) values('$manufacturer')"

但我建议使用 PDO 或 MySQLI。

这是一篇很棒的文章:

于 2013-01-14T06:29:29.783 回答
0

使用mysql_real_escape_stringwhich 转义字符串中的特殊字符以用于 SQL 语句

$manufacturer = mysql_real_escape_string($manufacturer);

更多细节:

http://php.net/manual/en/function.mysql-real-escape-string.php

于 2013-01-14T06:29:59.437 回答
0

它已被弃用,但您正在寻找mysql_real_escape_string.

但是忘记mysql_并学习PDO,它更安全。

于 2013-01-14T06:30:21.550 回答