数据不会从PDO提交

时间:2012-11-17 02:16:36

标签: php

我是PHP新手并尝试使用PDO而不是mysqli。但是,当我单击提交时,我无法将firstname和lastname的值放入sql数据库中。我错过了什么?

<!DOCTYPE HTML>

<?php 

$server = 'localhost';
$user = 'xxxx';
$pass = 'xxxxx';
$db = 'xxxxxx';

try {
    $con = new PDO("mysql:host=$server;dbname=$db",$user,$pass);
}
catch(PDOException $e) {
    echo $e->getMessage();
}

?>

<html>
<form name="Contact form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> 
First name: <input type="text" name="firstname"><br />
Last name: <input type="text" name="lastname"><br />
<input type="submit" value="Submit this!" name="submit">
</form>
</html>

<?php 

if(isset($_POST['submit'])) {

$sql = $con->query("INSERT INTO names (fname,lname) VALUES (:$_POST[firstname],:$_POST[lastname])");

}

?>

<?php $con = null; ?>

2 个答案:

答案 0 :(得分:3)

问题在于这一行:

$sql = $con->query("INSERT INTO names (fname,lname) VALUES (:$_POST[firstname],:$_POST[lastname])");

冒号不应该在那里,应该引用插入的值。最简单(也是最安全,最快)的方法是使用准备好的查询:

$statement = $con->prepare(
    'INSERT INTO names (fname,lname) 
     VALUES (:firstname,:lastname)');
$result = $statement->exec(array(
    'firstname' => $_POST['firstname'], 
    'lastname' => $_POST['lastname']));

另请阅读有关SQL注入的更多信息。您的原始代码存在安全漏洞。见http://php.net/manual/en/security.database.sql-injection.php

答案 1 :(得分:1)

你应该将->query()分成->prepare->execute调用,以实际利用预准备语句/绑定参数:

 $st = $con->prepare("INSERT INTO names (fname,lname) VALUES (:first, :last)");
 $result = $st->execute(array("first"=>$_POST["firstname"], "last"=>$_POST["lastname"]));

如果要使用->query(),则需要在将各种字符串变量连接到查询之前使用$con->quote()