0
我忘記了從哪裏複製它(我認爲用戶在php.net上發佈它),但是用於獲取已準備和正常MySQLi語句結果的此函數未返回任何結果PHP MySQLi準備語句:獲取不返回連接的結果
function fetch($result){
$array = array();
if($result instanceof mysqli_stmt){
$result->store_result();
$variables = array();
$data = array();
$meta = $result->result_metadata();
while($field = $meta->fetch_field()){
$variables[] = &$data[$field->name];
}
call_user_func_array(array($result, 'bind_result'), $variables);
$i=0;
while($result->fetch()){
$array[$i] = array();
foreach($data as $k=>$v)
$array[$i][$k] = $v;
$i++;
}
}elseif($result instanceof mysqli_result){
while($row = $result->fetch_assoc())
$array[] = $row;
}
return $array;
}
我一直在嘗試使用它,像這樣(所有這些功能都是類$數據庫的方法):
與包含一個簡單的INNER JOIN,至少在一個我試圖語句中使用時function query($str, $values){
if($stmt=$this->sql->prepare($str)){
$types=$this->castArrayAsString($values); //returns a string of $values's types for bind_params
array_unshift($values, $types);
call_user_func_array(array(&$stmt, 'bind_param'), $this->makeValuesReferenced($values));
$stmt->execute();
$result=$this->fetch($stmt); //the function I'm having problems with
if(empty($result)){
$return=true;
}else{
$return=$result;
}
$stmt->close();
}else{
echo $this->sql->error;
$return=false;
}
return $return;
}
這不會返回任何內容:
$list=$database->query("SELECT a.field1, b.field2 FROM table1 AS a INNER JOIN table2 AS b ON a.id_table2=b.id WHERE a.someid=?", array($someid));
這工作得很好:
$list=$database->query("SELECT field1, field2 FROM table1 WHERE someid=?", array($someid));
如果我打印出來,從取結果的元數據,它表明選擇的字段等,但仍然給出了取()FUNC沒有最終結果。
任何幫助表示讚賞,
感謝
編輯這裏是全班
<?php
class database{
var $HOST="xx.xx.xx.xxx";
var $USER="xxxxxxxxxxx";
var $PASS='xxxxxxxxxx';
var $DATABASE="my_database";
var $sql;
function database(){
$this->sql=new mysqli($this->HOST, $this->USER, $this->PASS, $this->DATABASE);
if($this->sql->connect_errno){
echo "ERROR - No MySQL connection: ".$mysqli->connect_error;
exit;
}
}
function query($str, $values){
if($stmt=$this->sql->prepare($str)){
$types=$this->castArrayAsString($values);
array_unshift($values, $types);
call_user_func_array(array(&$stmt, 'bind_param'), $this->makeValuesReferenced($values));
$stmt->execute();
$result=$this->fetch($stmt);
if(empty($result)){
$return=true;
}else{
$return=$result;
}
$stmt->close();
}else{
echo $this->sql->error;
$return=false;
}
return $return;
}
function fetch($result){
$array = array();
if($result instanceof mysqli_stmt){
$result->store_result();
$variables = array();
$data = array();
$meta = $result->result_metadata();
while($field = $meta->fetch_field()){
$variables[] = &$data[$field->name];
}
call_user_func_array(array($result, 'bind_result'), $variables);
$i=0;
while($result->fetch()){
$array[$i] = array();
foreach($data as $k=>$v)
$array[$i][$k] = $v;
$i++;
}
}elseif($result instanceof mysqli_result){
while($row = $result->fetch_assoc())
$array[] = $row;
}
return $array;
}
function close(){
$this->sql->close();
}
function castArrayAsString($array){
$types="";
foreach($array as $key => $value) {
if(is_numeric($value)){
if(is_float($value)){
$types.="d";
}else{
$types.="i";
}
}else{
$types.="s";
}
}
return $types;
}
function makeValuesReferenced($arr){
$refs=array();
foreach($arr as $key => $value){
$refs[$key] = &$arr[$key];
}
return $refs;
}
}
$database=new database;
?>
a.id_table2的價值觀和b.id匹配,我嘗試了相同的結果外連接。爲了確保我的SQL沒有錯,我在phpMyAdmin中檢查了它,它返回了期望的結果沒有問題。 – Paul
它看起來不是代碼,查詢本身存在問題。你能發佈你的模式的片段嗎? –
當然, table1:id(int,autoinc),id_table2(int),field1(varchar),field2(varchar) table2:id(int,autoinc),field1(varchar),field2(varchar) 同樣,I在SQL提示符下嘗試了我遇到的確切查詢,它確實有效,但不在上面的代碼中,這導致我相信它是代碼。也許與使用ON有關。我會發布全班測試。 – Paul