mysql_到PDO迁移问题

时间:2016-05-13 16:05:25

标签: php mysql pdo migration

我在尝试从mysql_迁移到PDO时遇到了一些问题(我用它来做新事物)。

我已经完成了大部分工作,但是这个功能让我发疯了。

这是:

function fields($thequery) /* SELECT * FROM table */
{
    $fields=array();
    $fields['num']=mysql_num_fields($thequery);
    for ($i = 0; $i < $fields['num']; $i++) {
        $fields['data'][]=mysql_fetch_field($result, $i);
    }
    return $fields;
}

我试过阅读其他一些帖子,但我无法弄清楚。

这是我目前最好的,但我总是得到未定义的索引&#34; num&#34;。

function fields($thequery)
{
    global $pdo; /* Connection */

    $result = $pdo->prepare($thequery);
    $result->execute();
    $fields['num'] = $result->rowCount();
    for ($i = 0; $i < $fields['num']; $i++) {
        $fields['data'][]=$result->getColumnMeta($i);
    }
    return $fields;
}

我做错了什么? 提前谢谢!

3 个答案:

答案 0 :(得分:1)

你有几个问题。首先,您没有在第二个函数$fields = array();中声明fields数组,然后在计算行时遇到问题:

$result->rowCount();

您的查询可能是SELECT查询,不适用于rowCount()

来自docs

  

PDOStatement :: rowCount()返回受相应PDOStatement对象执行的最后一个DELETE,INSERT或UPDATE语句影响的行数。

对于SELECT当您没有执行COUNT()查询时,您可以在$result->execute();

之后返回此类行数
$rows = $result->fetchAll();
$num_rows = count($rows);

答案 1 :(得分:1)

我看到了问题;如果您打算致电PDOStatement::rowCount(),请致电PDOStatement::columnCount()

您的代码应为

function fields($thequery)
{
    global $pdo; /* Connection */

    $result = $pdo->prepare($thequery);
    $result->execute();
    $fields['num'] = $result->columnCount();  // Change this line
    for ($i = 0; $i < $fields['num']; $i++)
    {
        $fields['data'][] = $result->getColumnMeta($i);
    }
    return $fields;
}

请注意,the documentation for PDOStatement::getColumnMeta()包含以下警告:

  

警告此功能 EXPERIMENTAL 。这个函数的行为,   它的名称和周围的文档可能会更改,恕不另行通知   PHP的未来版本。使用此功能需要您自担风险。

     

警告并非所有PDO驱动程序都支持 PDOStatement :: getColumnMeta()

答案 2 :(得分:0)

好吧,我已经尝试过Jay Blanchard和Darwin von Corax所说的话。

问题是数组(我忘了声明它)和columnCount()。

最大的问题是我误解了这个功能。我确信这是在计算行...我不知道为什么,现在看起来很合理!

function fields($thequery) {
   global $pdo;

   $result = $pdo->prepare($thequery);
   $fields = array();
   $result->execute();
   $fields['num'] = $result->rowCount();
   for ($i = 0; $i < $fields['num']; $i++) {
      $fields['data'][]=$result->getColumnMeta($i);
   }
   return $fields;  }