我试图避免在我的页面中使用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()
后,为什么没有任何内容插入数据库?
答案 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
方法(bindParam
或bindValue
),而不是将参数直接传递给execute
。如果需要,这将允许您指定数据类型,但似乎这些都应该是字符串。