PDO声明什么都不做?

时间:2009-08-10 00:07:29

标签: php mysql insert pdo

$columns = "name, address, city, state, zip";
$values = "'$name', '$address', '$city', '$state', '$zip'";
$query = "insert into customer values ($values)";
$statement = $dbh->prepare($query);
$statement->execute();

所以我对此完全陌生。幼儿园的例子和宝贝谈话不会令人反感! :)

表单执行时没有结果,也没有错误。

2 个答案:

答案 0 :(得分:4)

试试这个。 (有很多方法可以做到这一点)

$sql = "INSERT INTO customer (name,address,city,state,zip) VALUES (:name,:address,:city:,state,:zip)";

$sth = $dbh->prepare($sql);
$sth->execute(array(
     ':name' => $name, 
     ':address' => $address, 
     ':city' => $city,
     ':state' => $state,
     ':zip'   => $zip
));

答案 1 :(得分:3)

首先,你完全没有理解陈述。 :)

以下是应该如何做的:

$query = "insert into customer (name, address, city, state, zip) values (?, ?, ?, ?, ?)";
$statement = $dbh->prepare($query);
$statement->execute(array($name, $address, $city, $state, $zip));

正如您无疑可以看到自己,您甚至没有在您的示例中使用$columns变量。这应该是查询的一部分。

您的第二个错误是您尝试将数据变量直接插入到字符串中。准备好的陈述的全部内容是为了避免这种情况。相反,你使用占位符(在这种情况下是?字符)。 PDO将在占位符中以实际变量替换您提供的相同顺序。这是通过使用数组将它们作为参数发送到PDO来完成的。

这远远优于将完整查询构建为字符串的旧方法,因为它消除了所有安全风险。以您的方式构建查询所导致的漏洞非常真实,可能是互联网上最常见的安全漏洞。如果您想了解更多信息,请尝试搜索“SQL注入”。

您没有收到错误的原因可能是因为您尚未设置错误报告机制。尝试在连接后添加:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);