2011-07-04 16 views
4

私は配列に入れたいと思う複数の結果を返すクエリの準備文を使用しています。しかしbind_resultは、配列では動作しませんので、これは、私はそれを行う方法です。PHP - 配列へのbind_result

$read_items = $db->stmt_init(); 
$read_items->prepare("SELECT item_id, item_name FROM items"); 
$read_items->execute(); 
$read_items->bind_result($var1, $var2); 
while ($read_items->fetch()) { 
    $item_id[] = $var1; 
    $item_name[] = $var2; 
} 

は/ $ののitem_idと$ ITEM_NAME配列に結果を置くためのより良い/よりエレガントな方法明確ありますか?

上記からわかるように、私は "中間体"のように$ var1と$ var2を使用しています。そして、常により良い方法が必要であると感じています。

ありがとうございました。

答えて

3

私はそれのための信用を取ることはできませんが、PHP manualは素敵な溶液(そのまま貼り付け)があります。私は本当にさまざまであなたのアイテムID年代や項目名を入れてのポイントが表示されていない

<?php 

// blah blah... 
call_user_func_array(array($mysqli_stmt_object, "bind_result"), $byref_array_for_fields); 

// returns a copy of a value 
$copy = create_function('$a', 'return $a;'); 

$results = array(); 
while ($mysqli_stmt_object->fetch()) { 
    // array_map will preserve keys when done here and this way 
    $results[] = array_map($copy, $byref_array_for_fields); 
} 
+0

アンディ、ありがとう。私はまた、ドキュメントやコメントを介して、上記のコードを試してみましたが、それは私のために動作しません。私の具体的な例に、上記のことがどのように当てはまるのかを説明できますか?私はこの周りに頭を下げるのに少し苦労して集まりました。ありがとう。 – CodeVirtuoso

+0

使用しているPHPのバージョンは? – Andy

+0

PHP 5.3と私は必要なものをインストールすることができますので、サーバー上の完全なコントロールを持っています。 – CodeVirtuoso

-1

を配列、あなたは二つのコレクションの単一のオブジェクトを分割している???理由はありません。はい。

ので、戻ってこれまで起こって、何をやるべきことは次のとおりです。

$items[$i]['var1']=$var1; 

$items[$i]['var2']=$var2; 

しかし、これは、もちろん、まだ非常に良いではありません。

正しい解決策は、あなたのmysqli結果を配列にマップする関数を用意して、何かクエリがあればそれを直接開始することができるようにすることです。ここにいくつかのデータベースがありますが、すべてが最新ではありません瞬間:私はこのように使用

function connectmysqldb($database,$host,$port,$user,$password){ 
    global $conn; 
    $conn=mysqli_connect($host, $user, $password, $database,$port); 
    if (!$conn){ 
     die('Error: Could not connect: ' . mysqli_connect_error()); 
    } 
    return $conn; 
} 

function connectpgdb($database,$host,$port,$user,$password){ 
    $connectString = 'host=' . $host . ' port=' . $port . ' dbname=' . $database . ' user=' . $user . ' password=' . $password; 
    $conn = pg_connect ($connectString); 
     if (!$conn) 
     { 
     die('Error: Could not connect: ' . pg_last_error()); 
     } 
    return $conn; 
} 

function connectmssqldb($dbname,$host,$port,$uid,$pw){ 
    $connectionOptions = array("UID"=>$uid,"PWD"=>$pw); 
    $conn = sqlsrv_connect($host, $connectionOptions); 
    if (!$conn) 
     { 
     die('Error: Could not connect: ' . print_r(sqlsrv_errors(), true)); 
     } 
    return $conn; 
} 
function sqlec($query,$dbtype,$dbname,$host,$port,$uid,$pw){ 
    switch($dbtype){ 
      default: 
       $res="Database Type not Recognized : $dbtype"; 
       break; 

      case "mysql": 
       global $conn; 
       if(!isset($conn)){ 
        $conn=connectmysqldb($dbname,$host,$port,$uid,$pw); 
       } 
       $clone=mysqli_multi_query($conn,$query); 
       if(!$clone){ 
        die('Error: ' . mysqli_error($conn)); 
       }else{ 
        $clonearray=array(); 
        $i=0; 
        if ($clone = mysqli_store_result($conn)) { 
         while ($row = mysqli_fetch_assoc($clone)){ 
          $clonearray[$i]=$row; 
          $i++; 
         } 
         mysqli_free_result($clone); 
        } 
        $res=$clonearray; 
       } 
       break; 

      case "postgres": 
       $conn=connectpgdb($dbname,$host,$port,$uid,$pw); 
       $clone=pg_query($conn,$query); 
       if (!$clone) 
       { 
        die('Error: ' . pg_last_error()); 
       }else{ 
        $clonearray=array(); 
        $i=0; 
        while ($row = pg_fetch_row($clone)) 
         { 
         $count = count($row); 
         $y = 0; 
         while ($y < $count) 
          { 
          $c_row = current($row); 
          $clonearray[$i][pg_field_name($clone,$y)] = $c_row; 
          next($row); 
          $y = $y + 1; 
          } 
         $i = $i + 1; 
         } 
        pg_free_result($clone); 
        pg_close($conn); 
        $res=$clonearray; 
       } 
       break; 

      case "mssql": 
       $conn=connectmssqldb($dbname,$host,$port,$uid,$pw); 
       $res=sqlsrv_query($conn,$query); 
       if (!$res) 
       { 
        die("Error in statement execution.\n".print_r(sqlsrv_errors(), true)); 
       }else{ 
        $i=0; 
        $sqlsarray=array(); 
        while($row = sqlsrv_fetch_array($res, SQLSRV_FETCH_ASSOC)) 
        { 
         if($i==0){ 
         $arrk=array_keys($row); 
         } 
         $j=0; 
         while($j<count($arrk)){ 
          $sqlsarray[$i][$arrk[$j]]=$row[$arrk[$j]]; 
          $j++; 
         } 
         $i++; 
        } 
        $res=$sqlsarray; 
       } 
       break; 
    } 
    return $res; 
} 


function local_sqlec($query){ 
    global $db_server; 
    global $db_db; 
    global $db_port; 
    global $db_username; 
    global $db_password; 
    return sqlec($query,"mysql",$db_db,$db_server,$db_port,$db_username,$db_password); 
}   

$r=local_sqlec("SELECT test1,test2 FROM test"); 
$i=0; 
echo "last id =".($r[0]['test1'])."<br>"; 
echo "Row count =".($r[0]['test2'])."<br>"; 

while($i<$r[0]['test2']){ 
    echo "inserted id =".($r[0]['test1']+$i)."<br>"; 
    $i++; 
}