mysqli预处理语句 - 构建关联数组

时间:2013-05-31 05:35:40

标签: mysqli prepared-statement associative-array

我正在使用mysqli预处理语句编写函数。我的目标是以$key=>$value格式构建关联数组。由于mysqli预处理语句没有内置工具来创建关联数组(而不是遗留查询),我需要隔离$key(列名)和$value(数据)元素并使用他们来构建数组。这一切看起来都很简单,但我遇到了障碍。

代码:

function read($recSearch)  
    {  
    $parameters = array();
    $columnName = array();  
    $results = array();
    $mysqli = new mysqli('localhost','root','password','PNS_DB');
        if ($mysqli->connect_error) {die('Connect Error (' . $mysqli->connecto_errno . ') ' . $mysqli->connect_error);}

    $sql="SELECT Complex_ID,Complex_Name FROM Complex WHERE Complex_Name LIKE CONCAT('%', ? , '%')";

    $stmt = $mysqli->prepare($sql);
        if (false === $stmt) {die('Query Prep Failed' . $mysqli->error);}
    $stmt->bind_param('s',$recSearch);   //string
    $result = $stmt->execute();
        if (false===$stmt) {die('execute() failed: '.$stmt->error);}
    $meta = $stmt->result_metadata();  
    while ( $field = $meta->fetch_field() ) 
    {
    $parameters[] = $field->name;   Yields field names - required for second loop -- why?
//  $columnName[] = $field->name;   This statement broke the 2nd while fetch loop -- why?
    }
//  $columnName = $parameters;      This statement broke the 2nd while fetch loop -- why?

    $x = call_user_func_array(array(&$stmt, 'bind_result'), &$parameters);
    if (false === $x) {die('bind_param()error :' . $mysqli->error);}

    while ( $stmt->fetch() ) 
    {  
        $x = array();
        foreach( $parameters $key=>$val) 
        {
                      echo "key=",$key," "          // Yields array element number
                  echo "val=",$val,"<br />";    // Yields the array element contents

        }  
    }  
    return $results;  
}   
$results=read($recSearch);

数组$ parameters []提供双重任务:它在第一个while循环中收集键(列名),但在第二个while循环中覆盖它们。我需要保留字段名称和值来构建关联数组,但每次尝试都会破坏第二个循环。

注意: $parameters[]最初包含字段名称,但在$parameters[]元素填充值时,在第二次获取循环期间会丢失这些字段名称。我尝试将$fields分配给$columnNames[],但这打破了第二轮,我不知道为什么......我尝试将$parameters[]分配给$columnNames[],这也打破了第二个循环。我尝试使用不同的数组名称将列名与值分开,但每次尝试都会破坏第二个循环。如果我注释掉第一个while循环,第二个循环就会中断。我也不了解这种依赖性。

简而言之,我需要将列名和数据放入变量中以构建关联数组。如果有人可以提供帮助,我可以从那里拿走它!

0 个答案:

没有答案