将mysql结果放入一个php数组中,如下所示


Put mysql results in one php array, like this?

要获得这样的array("123","456","789");数组,我使用代码:

$Regids = mysql_query("SELECT regid FROM $tabel WHERE active = '1'");
while($row = mysql_fetch_array($Regids))
{
    $result_array[] = "'"".$row['regid']."'"";
}
$regIDs = implode(',', $result_array);
$registrationIDs = array($regIDs); // array("123","456","789");

但我希望PHP/mySQL对此有一个更简单/更快的解决方案?

我怀疑您的代码是否能产生您想要的结果。

// assuming the this query produces 123,456,789
$Regids = mysql_query("SELECT regid FROM $tabel WHERE active = '1'");
// $row contains: array("123")
while($row = mysql_fetch_array($Regids))
{
    $result_array[] = "'"".$row['regid']."'"";
}
// $result_array now contains: array("'"123'"", "'"456'"", "'"798'"");
$regIDs = implode(',', $result_array);
// $regIDS now contains a single string: "'"123'",'"456'",'"798'"";
$registrationIDs = array($regIDs);
// registrationIDs now is an array containing a single string: array("'"123'",'"456'",'"798'"");

如果您真的需要一个像这样的数组:array("123","456","789");,它会简单得多。

$Regids = mysql_query("SELECT regid FROM $tabel WHERE active = '1'");
while($row = mysql_fetch_array($Regids))
    $registrationIDs[] = $row['regid'];

仅此而已。

如果您的mysql结果包含整数而不是字符串形式的数字,您可以这样转换:

$Regids = mysql_query("SELECT regid FROM $tabel WHERE active = '1'");
while($row = mysql_fetch_array($Regids))
    $registrationIDs[] = strval($row['regid']);

此外,请记住,mysql_*函数正变得越来越不受欢迎。不要用它启动新代码,并计划将现有代码移植到mysqli_*或PDO。

您可以使用PDO实现。乍一看,它可能更难理解,但一旦你习惯了,它就会变得非常强大和方便(IMHO!一年前我换了它,我喜欢它)!

举个例子,PDO的实现是这样的:

/*CONNECT TO DB, FIRST. $dbh contains a handler to the current DB connection*/
$stmt = $dbh->prepare("SELECT regid FROM table WHERE active = '1'");
$stmt->execute();
$Regids = $stmt->fetchAll(PDO::FETCH_COLUMN,0);

您可以指定许多格式选项,如

PDO::FETCH_COLUMN

PDO::FETCH_ASSOC

还有更多。。。这些选项将允许您按照自己的喜好格式化数组。正如你所看到的,我只在3行中得到了结果。

编辑

注意:在将PHP变量插入查询之前,您不会对其进行转义,并且您的代码可能会受到SQL注入的影响。小心!!这里有一个简单的预防指南。(在我的代码中,为了清楚起见,我只放了表名而不是$table来避免这个问题,只是简单地展示了如何获得您想要的结果。)

试试这个。。在查询中使用组连接。。。

$Regids = mysql_fetch_array(mysql_query("SELECT GROUP_CONCAT(regid) as regids FROM $tabel WHERE active = '1'"));
echo $Regids[0]['regids']; // 123,456,789

要获得结果"123"、"456"、"789",请尝试此

$Regids = mysql_fetch_array(mysql_query("SELECT GROUP_CONCAT(''"',CONCAT(regid),''"') as regids FROM $tabel WHERE active = '1'"));
    echo $Regids[0]['regids']; // "123","456","789"