我正在使用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循环,第二个循环就会中断。我也不了解这种依赖性。
简而言之,我需要将列名和数据放入变量中以构建关联数组。如果有人可以提供帮助,我可以从那里拿走它!