3

SQLクエリの結果を配列に入れたい。以下のコードを試してみましたが、最初のレコードが $count 回表示されます。明らかに、「$dept[$i]= $row['name'];」で何か問題があります。しかし、私はそれを修正する方法がわかりません。誰か助けてください?

$sql="SELECT name FROM system_dept ORDER BY id";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
$count=mysql_num_rows($result);
if (!mysql_query($sql,$con))
{
    die('Error: ' . mysql_error());
}
else
{
    $dept = array();
    $i=0;

    for($i=0;$i<$count;$i++)
    {
        $dept[$i]= $row['name'];
        echo $dept[$i];
    }
}

わかりました、mysqli を使用しようとしましたが、うまくいきません。MySQL クライアントのバージョン: 4.1.22 PHP 拡張機能: mysql mysqli は mysql php 拡張機能で動作しますか?

4

3 に答える 3

5

実際にはすべての行が必要なのに、なぜ 1 行だけをフェッチするのですか?

mysqli の場合:

$db = new mysqli("localhost", "foo_dbo", "pass", "foo_db");    
$result = $db->query("SELECT name FROM system_dept ORDER BY id");    
$names = $result->fetch_all(MYSQLI_ASSOC);

PDO の場合:

$db = new PDO('mysql:dbname=foo_db;dbhost=localhost', 'foo_dbo', 'pass');
$stmt = $db->query("SELECT name FROM system_dept ORDER BY id");
$names = $stmt->fetchAll(PDO::FETCH_ASSOC);

これにより、他の回答と同じ結果が得られますが、ループはありません! それはより速いです!行ごとにフェッチすると遅くなりますが、何をするかによっては、必要なメモリが少なくなります。各行を配列に格納している場合、これは当てはまりません。したがって、すべてを取得することが道です。

于 2012-12-10T01:39:26.010 に答える
3
$dept = array();
$result = mysql_query('SELECT name FROM system_dept ORDER BY id');
while ($row = mysql_fetch_assoc($result))
{
  $dept[] = $row['name'];
  echo $row['name'];
}

mysql_*関数を使用して新しいコードを記述しないでください。それらはもはや保守されておらず、コミュニティは非推奨プロセスを開始しています。赤いボックスが見えますか? 代わりに、準備済みステートメントについて学び、 PDOまたはMySQLiのいずれかを使用する必要があります。どちらかを判断できない場合は、この記事が役に立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります。PHP で関数を使用すべきではない理由も参照してください。mysql

于 2012-12-10T01:41:37.263 に答える
1

you are only fetching one row to fetch more rows you'll need to call fetch result again so just add this to your code and things should be fine:

for($i=0;$i<$count;$i++)
    {
        $dept[$i]= $row['name'];
        echo $dept[$i];
        $row=mysql_fetch_array($result);
    }

I would recommend using a while loop instead like the following:

$sql="SELECT name FROM system_dept ORDER BY id";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if (!mysql_query($sql,$con))
{
    die('Error: ' . mysql_error());
}
else
{
    $dept = array();
    while($row=mysql_fetch_array($result))
    {
      $dept[]=$row['name'];
      echo $row['name'];
     }
}

If at all possible look into mysqli and PDO, as they are both more efficient

于 2012-12-10T01:45:30.853 に答える