Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过ID从mysql中提取多行的最有效方法是什么?_Php_Mysql - Fatal编程技术网

Php 通过ID从mysql中提取多行的最有效方法是什么?

Php 通过ID从mysql中提取多行的最有效方法是什么?,php,mysql,Php,Mysql,我有一个典型的情况,我需要通过ID从mysql中提取多行。我只知道两种方法,但是我想知道是否有更好的方法来做到这一点?如果没有,那么我自己的方法中哪一种最整洁/最快/更好? 我的第一种方法:(~0.0003030) 我的第二种方法:(~0.0001040) 我之所以考虑第二种方法,是因为它只使用1x查询。。然而,我坚信这两种方法都不完美,需要优化。据我所知,您不能进行这样的查询:其中id='2,3,4'实际上,您可以。实际上,操作员就是这样做的 SELECT * FROM tasks WHERE

我有一个典型的情况,我需要通过ID从mysql中提取多行。我只知道两种方法,但是我想知道是否有更好的方法来做到这一点?如果没有,那么我自己的方法中哪一种最整洁/最快/更好?

我的第一种方法:(~0.0003030)

我的第二种方法:(~0.0001040)


我之所以考虑第二种方法,是因为它只使用1x查询。。然而,我坚信这两种方法都不完美,需要优化。据我所知,您不能进行这样的查询:
其中id='2,3,4'

实际上,您可以。实际上,操作员就是这样做的

SELECT * FROM tasks WHERE `id` IN (2, 3, 4)
我会成功的。您可以将数值或字符串值与IN运算符一起使用

正如约翰失败的例子,这里是一个正确的方法

$ids = array(3, 4, 6, 11);
$in  = implode(",",$ids);
$sql = "SELECT * FROM tasks WHERE `id` IN ($in)");
为了经常使用,我会做一个占位符,这样调用整个表达式

$ids  = array(3, 4, 6, 11);
$data = $db->getArr("SELECT * FROM tasks WHERE `id` IN (?a)",$ids);
为了回答评论中的问题,下面是我的db类的代码

function escapeString($value)
{
    return  "'".mysql_real_escape_string($value,$this->connect)."'";
}
function createIN($data)
{
    if (!is_array($data))
    {
        throw new E_DB_MySQL_parser("Value for ?a type placeholder should be array.");
    }
    if (!$data)
    {
        throw new E_DB_MySQL_parser("Empty array for ?a type placeholder.");
    }
    $query = $comma = '';
    foreach ($data as $key => $value)
    {
        $query .= $comma.$this->escapeString($value);
        $comma  = ",";
    }
    return $query;
}

getArr()方法与此没有直接关系,因为它只负责结果的类型

这句话的礼貌性不强。如果
$id
不是数组或是空的,会发生什么呢?@Kalle H。这是个好问题。语法错误。所以,你必须检查这两种情况。所以我在我的占位符处理程序中是这样做的。@NB,上校弹片不需要客气。因为99%的时候他是对的。每次和他一起跑步,我都能学到一些东西。@Schraspel上校:太好了!起初我有一些问题,但我已经解决了。我第一次尝试了
id IN('$id')
->
id IN('3,4,6,11')
,只得到了第一个结果(3)。但是,正确的是('3','4','6','11')中的
id
。这种方法非常有效。我对你感激不尽。我在问题中添加了microtime()结果。您的方法结果是~0.0000930,这对我的项目(无论是旧项目还是即将推出的项目)都有很大影响。谢谢还要感谢约翰:)
$ids  = array(3, 4, 6, 11);
$data = $db->getArr("SELECT * FROM tasks WHERE `id` IN (?a)",$ids);
function escapeString($value)
{
    return  "'".mysql_real_escape_string($value,$this->connect)."'";
}
function createIN($data)
{
    if (!is_array($data))
    {
        throw new E_DB_MySQL_parser("Value for ?a type placeholder should be array.");
    }
    if (!$data)
    {
        throw new E_DB_MySQL_parser("Empty array for ?a type placeholder.");
    }
    $query = $comma = '';
    foreach ($data as $key => $value)
    {
        $query .= $comma.$this->escapeString($value);
        $comma  = ",";
    }
    return $query;
}