我正在尝试创建一个数据库查询函数,该函数可以采用多个参数并可以在其他地方重用,但是我尝试了许多与我的方法类似的在线方法,但它们无法按预期工作。
function query($query, $bindings, $type)
我希望能够使用此单个函数随时随地运行查询,使用PDO驱动程序这种类型的函数要容易得多,因为您只需在内部输入绑定即可,->execute($binding);但是在这种情况下,我不得不立即将MySQLi用作应用程序依赖它,但想要升级它以使用准备好的语句。
->execute($binding);
我需要如何使用该函数以确保其可重用和灵活的示例:
$engine->query("SELECT * FROM accounts WHERE email = :mail AND id = :id",array(':mail' => $_POST['mail'], ':id' => 2))->fetch_assoc();
让我们把它们分开。首先是语句,然后是用于绑定使用的参数的数组,然后是参数的类型,最后是要在查询中使用的fetch_的类型(ASSOC,OBJECT,ARRAY)等。
"SELECT * FROM accounts WHERE email = :mail AND id = :id", array(':mail' => $_POST['mail'], ':id' => 2), "si" ->fetch_assoc();
尽管实现命名参数将是一项艰巨的任务,但其余的工作还是很可行的。
PHP> = 5.6变体,实现splat运算符:
function query($query, $params = NULL, $types = NULL) { if (!$params) { return $mysqli->query($query); } $statement = $this->mysqli->prepare($select); $types = $types ?: str_repeat('s', count($params)); $statement->bind_param($types, ...$params); $statement->execute(); return $statement->get_result(); }
这样使用
$sql = "SELECT * FROM accounts WHERE email = ? AND id = ?"; $row = $engine->query($sql, [$_POST['mail'], 2])->fetch_assoc();
或者,如果您想显式设置类型
$row = $engine->query($sql, [$_POST['mail'], 2], "si")->fetch_assoc();