【发布时间】:2015-11-10 19:12:15
【问题描述】:
我想澄清一下准备好的语句,以及它们在以其他方式组装时的行为方式。
下面的示例代码来自 Straight out this W3 entry。我的问题是,比本示例中提供的四个值要多得多,我希望将它们存储在一个数组中,然后运行一个 foreach 来准备每个字符串。
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email)
VALUES (:firstname, :lastname, :email)");
$stmt->bindParam(':firstname', $firstname);
$stmt->bindParam(':lastname', $lastname);
$stmt->bindParam(':email', $email);
// insert a row
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
// insert another row
$firstname = "Mary";
etc
下面的编辑对应用程序是否安全,或者它是否破解了准备好的语句的全部要点?
$stuff = array("firstname", "lastname", "email");
foreach ($stuff as $singlestuff) {
$singlestuff1 = ':'.$singlestuff;
$singlestuff2 = '$'.$singlestuff;
$stmt = $conn->prepare("INSERT INTO MyGuests ($singlestuff1) ) VALUES ($singlestuff2)");
$stmt->bindParam($singlestuff1, $singlestuff2);
}
如有宏观错误,请见谅,代码只是概念的说明。
提前致谢!
【问题讨论】:
-
请阅读 php 手册以了解您使用的功能。你会发现他们在 w3schools 中没有告诉你的东西。
-
你的 for/each 波浪线的终点在哪里?您单独绑定,但很难说没有波浪线您甚至在做什么。好像绑定的概念生成的源代码行数太高,困扰你
-
@Drew 很抱歉 foreach 结束,刚刚编辑了上面的代码。无论如何,我一直在考虑这种解决方法,以拥有一个可以以不同形式运行的灵活脚本。因此,如果每个表单都有自己的输入列表,那么拥有一个 foreach 肯定会加快开发和更新的过程。但是话又说回来,老实说,我不确定这段代码是否会引发安全问题或更糟,所以您能否进一步解释一下您的观点?您是否建议按原样处理准备好的语句?
-
下面的回答有用吗,还是删掉?
标签: php mysql pdo foreach prepared-statement