我有一个非常简单的辅助函数,可为传统的普通mysql驱动程序用法生成SET语句:
function dbSet($fields) { $set=''; foreach ($fields as $field) { if (isset($_POST[$field])) { $set.="$field
='".mysql_real_escape_string($_POST[$field])."', "; } } return substr($set, 0, -2); } 这样使用
$id = intval($_POST['id']); $fields = explode(" ","name surname lastname address zip fax phone"); $_POST['date'] = $_POST['y']."-".$_POST['m']."-".$_POST['d']; $query = "UPDATE $table SET ".dbSet($fields)." stamp=NOW() WHERE id=$id"; 它使代码非常干燥,同时又容易又灵活。
我要问是否有人愿意利用PDO准备好的语句功能来共享类似的功能?
我仍然对如何实现这一目标感到怀疑。 是否有使用PDO准备好的语句插入数据的简单明了的方法?它应该是什么形式?查询构建器助手?还是插入查询助手?应该采用什么参数?
我希望它可以很容易用作SO的答案。因为在每个主题中我们都可以看到准备好的语句用法建议,但是没有一个很好的例子。我的意思是现实生活中的例子。我认为,键入bind_param()20次不是一种好的编程风格。甚至还有20个问号。
我通常有一个扩展PDO的类,但是我的类非常定制。如果我将其清理和测试过,将在以后发布。但是,这是您系统的解决方案。
function dbSet($fields, &$values) { $set = ''; $values = array();
foreach ($fields as $field) {
if (isset($_POST[$field])) {
$set .= "`$field` = ?,";
$values[] = $_POST[$field];
}
}
return rtrim($set, ',');
}
$fields = explode(" ","name surname lastname address zip fax phone date"); $_POST['date'] = $_POST['y']."-".$_POST['m']."-"$_POST['d'];
$query = "UPDATE $table SET ".dbSet($fields, $values).", stamp=NOW() WHERE id=?"; $values[] = $id;
$dbh->prepare($query); $dbh->execute($values);
这可能并不完美,可能需要进行调整。它考虑了$dbh使用PDO连接进行设置的情况。待我提出的任何次要语法问题,都应该可以。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。