首先,您完全误解了陈述。:)
这是应该如何完成的:
$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);