簡體   English   中英

mysql_到PDO的遷移問題

[英]mysql_ to PDO migration issue

我在嘗試從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;
}

我嘗試閱讀其他文章,但無法弄清楚。

目前,這是我能做到的最好的方法,但是我總是得到未定義的索引“ num”。

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;
}

我在做什么錯呢? 提前致謝!

你有幾個問題。 首先,您無需在第二個函數$fields = array();聲明字段數組$fields = array(); ,然后在計算行數時遇到問題:

$result->rowCount();

您的查詢可能是SELECT查詢,不適用於rowCount()

來自文檔

PDOStatement :: rowCount()返回受相應PDOStatement對象執行的最后一個DELETE,INSERT或UPDATE語句影響的行數。

對於SELECT當您不執行COUNT()查詢時,可以在$result->execute();之后返回類似的行數$result->execute();

$rows = $result->fetchAll();
$num_rows = count($rows);

我看到了問題; 當您要調用PDOStatement::columnCount()時,您正在調用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;
}

請注意, PDOStatement::getColumnMeta()的文檔包含以下警告:

警告此功能是實驗性的 在以后的PHP版本中,此函數的行為,其名稱和周圍的文檔可能會更改,恕不另行通知。 使用此功能需要您自擔風險。

警告並非所有PDO驅動程序都支持PDOStatement :: getColumnMeta()

好吧,我已經嘗試了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;  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM