PDO不会在引用后插入

时间:2013-12-03 16:06:30

标签: php mysql database

我试图避免在我的页面中使用SQL注入。

// Connect to database server and select database
$connection = new PDO("mysql:dbname=tt8888;host=mysql.tt8888.com", "tt8888", "ttnopassword");
// Quote data to prevent SQL injection
$name = $connection->quote($name);
// Insert now        
$connection->query("INSERT INTO Contact (name, eeeee, llll, mmmmm, iiiii) VALUES ('$name','$eeeee','$llll','$mmmmm','$iiiii');");

没有quote(),它会很好地插入。使用print $name;quote()部分似乎工作正常。使用quote()后,为什么没有任何内容插入数据库?

2 个答案:

答案 0 :(得分:2)

PDO::quote会在您的值周围加上单引号。因此,您不需要在SQL中自己执行此操作。

虽然我强烈建议您切换到使用带有命名参数的prepare()

答案 1 :(得分:2)

请勿使用PDO::quote。使用参数化查询要好得多。

$stmt = $connection->prepare("INSERT INTO Contact (name, e, l, m, i) VALUES (?,
    ?, ?, ?, ?)");
// This will quote all of the values for you
$stmt->execute(array($name, $eeeee, $llll, $mmmm, $iiiii));

您还可以使用bind方法(bindParambindValue),而不是将参数直接传递给execute。如果需要,这将允许您指定数据类型,但似乎这些都应该是字符串。