我正在尝试创建一个数据库查询函数,该函数可以采用多个参数并可以在其他地方重用,但是我尝试了许多与我的方法类似的在线方法,但它们无法按预期工作。
function query($query, $bindings, $type)
我希望能够使用此单个函数随时随地运行查询,使用PDO驱动程序这种类型的函数要容易得多,因为您只需在内部输入绑定即可,->execute($binding);
但是在这种情况下,我不得不立即将MySQLi用作应用程序依赖它,但想要升级它以使用准备好的语句。
我需要如何使用该函数以确保其可重用和灵活的示例:
$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();
我生成SQL语句的代码工作正常-但是我在为$stmt生成字符串时遇到了一个问题-
问题内容: 我正在尝试将数组作为IN变量传递给for。我怎样才能做到这一点? 我无法让它为我的一生工作。有什么想法吗?上面的代码只是一个示例。 问题答案: 在这种情况下,这样做是不合适的。您正在构造实际的SQL(这就是逗号和引号),并将其作为参数传递。它基本上以评估那里是全部。 同样,这是关于引号的一个好电话。MySQL使用单引号。 您将需要仅使用字符串连接来构建SQL,或者使用多个参数。 编辑
问题内容: 我一直在学习对SQL查询使用预处理语句和绑定语句,到目前为止,我已经做到了这一点,它可以正常工作,但是当涉及多个参数或不需要参数时,它根本不是动态的, 这就是我所谓的对象类, 有时我不需要传递任何参数, 有时我只需要一个参数, 有时我只需要多个参数, 因此,我认为对于上述动态任务来说,这条线不够动态, 为了动态地构建bind_param,我在其他在线帖子中找到了这个。 我试图从php.
问题内容: 我最近从mysql切换到mysqli并开始使用准备好的语句。在mysql中我们做 因此,我们将整个表的数组放在一个变量中。 但是在mysqli中 所以基本上这里只有一个变量绑定到变量结果。我们如何获得与从mysql获得的变量(数组)相同的变量? PS-希望我的问题足够清楚。我知道他们的方法不多,但我希望能找到最好的方法。 PSS-我对程序方式比较满意。 问题答案: 最终,这段代码可以正
问题内容: 我真的希望有人花一点时间查看我的代码。我正在解析一些新闻内容,并且可以将初始解析插入到包含新闻URL和标题的数据库中。我想进一步扩展它,传递每个文章链接并分析文章的内容,并将其包含在我的数据库中。初始解析完全像这样工作: 如您所见,我正在使用PHP Simple HTML DOM Parser。 为了扩展,我尝试使用mysqli语句来绑定参数,以便将所有html标记插入数据库。我之前使
我有以下场景: 一次生产性服务 消费者服务的动态数量 消息包含特定产品的任务,因此一旦使用者x处理产品Y的消息。将来,x应该处理产品Y的所有消息。理想情况下,生产者服务应该将产品x的所有消息发送到一个队列中,只有消费者x才能从中读取。 为了平均分配工作负载,应该有一种方法,即一旦需要管理新产品,下一个可用使用者就会使用它。(我假设是所有使用者都在读取的队列) 我的方法: exchange发送“Ne