[英]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.