Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.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(mysql)获取行方法(以及assoc和object)_Php_Mysql_While Loop_Fetch - Fatal编程技术网

实现一个“通用”PHP(mysql)获取行方法(以及assoc和object)

实现一个“通用”PHP(mysql)获取行方法(以及assoc和object),php,mysql,while-loop,fetch,Php,Mysql,While Loop,Fetch,在几次尝试为我的想法找到一个独特的解决方案之后,我没有机会在这里发布这个问题,希望找到一个可以启发我的人 我正在开发一个功能齐全的PHP类,其中包含几个方法,因此我将能够做我将来愿意做的事情,也就是说,某种个人框架 我被困在类的fetchRow方法中。我希望使用此方法从查询中获取行,并希望此方法自动形成正确的数据结构 现在,假设我有这样一个查询: $query = mysql_query("SELECT name, surname FROM people", $dbHandle); 如果适用,

在几次尝试为我的想法找到一个独特的解决方案之后,我没有机会在这里发布这个问题,希望找到一个可以启发我的人

我正在开发一个功能齐全的PHP类,其中包含几个方法,因此我将能够做我将来愿意做的事情,也就是说,某种个人框架

我被困在类的fetchRow方法中。我希望使用此方法从查询中获取行,并希望此方法自动形成正确的数据结构

现在,假设我有这样一个查询:

$query = mysql_query("SELECT name, surname FROM people", $dbHandle);
如果适用,我希望得到以下结果:

/*
 * var_dump example results after launching a while statement with
 * mysql_fetch_row.
 *
 * 2 fields (name,surname), 2 "master" arrays with corresponding values
 *
 */

array
 0 = array( ...names... )
 1 = array( ...surnames... )
现在,我尝试了几个本机PHP函数、用户定义函数等,但没有目标

也许在这些尝试之后我疯了,也许这是不可能的,也许我看不到一个简单的方法来做到这一点


我该怎么做呢?

好吧,你可以这样做:

$data = array();
while (false !== ($row = mysql_fetch_array($result, MYSQL_NUM)) {
   foreach($row as $key => $value) {
      if(!isset($data[$key]) {
         $data[$key] = array();
      }

      $data[$key][] = $value;
   }
}
也就是说

只需使用条令—完整ORM或DBAL。 不要使用ext/mysql使用PDO或Mysqli。
你不是想重新发明教义吧?为什么不使用ORM系统呢?像教义?谢谢你们的快速回复。不,我以前都不懂教义。我想自己去做。当然,谢谢你的建议和链接。你说的通用PHP mysql获取行方法是什么意思?@Lèse是一个单独的方法,可以执行一个操作,而无需每次都重新键入相同的内容。好吧,我肯定是瞎了眼。这是正确的观点。谢谢@prodigitalson。但是您的解决方案提供了两个主数组,它们与一个带值的内部数组相匹配。我只想要这些带值的主数组。没有键。它们的键是jsut,它将是列的整数索引,所以jsut推到数组上是很容易的。您将得到如下结果:$data[0][0]='Name0'$data[1][0]='Name0'。。。这正是你想要的。trik是将列索引mysql\u fetch\u数组作为键来获取,而不是将列名mysql\u fetch\u作为键来获取。我想要:数组0=>数组'Bob','Jack','Daniel'。。。1=>数组‘Nickelsen’、‘Bibidi’、‘Bobidi’、。。。而不是…数组0=>数组0=>'Bob',1=>'Jack',2=>'Daniel'。。。1=>数组0=>'Nickelsen',1=>'Bibidi',2=>'Bobidi'。。。而这正是你将得到的。。。数组总是有键。。。数组'Value'与数组0=>'Value'完全相同。没有无键阵列。性能浪漫会很难看,但我不知道这是否值得否决。。。这正是他所要求的,不管这是多么误导。。。就个人而言,我甚至不知道为什么要将结果集排序到每列的值数组中。。。似乎是构造数据集最不有用的方法。