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

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

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

4

2 回答 2

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
));
于 2009-08-10T00:15:54.463 回答
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 来完成的。

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

你没有得到错误的原因可能是因为你没有设置错误报告机制。连接后尝试添加:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
于 2009-08-10T00:15:18.160 回答