2013-12-14 2 views
0

Когда я выполняю следующий код на сервере, который не поддерживает get_result(), $ results возвращается как «1». Кажется, что $ stmt-> fetch() работает неправильно. Есть ли что-то, что я делаю неправильно?PHP MySQLi подготовил оператор fetch() возвращает '1' вместо результата запроса

Я использую общую учетную запись хостинга GoDaddy и мой локальный сервер в качестве тестовой среды. Мой локальный сервер поддерживает get_result() так, чтобы он работал по назначению.

$stmt = self::$conn->prepare($sql); 

$ex = $stmt->execute(); 

$stmt->store_result(); 

if (method_exists($stmt, 'get_result')) 
{ 
    $results = $stmt->get_result(); 
} 
else 
{ 
    $results = $stmt->fetch(); 
} 
+0

Если вы var_dump ($ результатов) действительно ли это int (1) или это что-то еще? Если вам нужен ассоциативный массив, вы также должны пройти в fetch_style, как и $ stmt-> fetch (PDO :: FETCH_ASSOC) – user602525

+0

var_dump возвращает BOOL (true). Кроме того, $ stmt-> fetch() не принимает параметры. –

+0

Ой, черт возьми, я думал, что это PDO :: fetch() – user602525

ответ

0

я использовал следующий код, чтобы решить мою проблему:

$stmt = self::$conn->prepare($sql); 

$ex = $stmt->execute(); 

$stmt->store_result(); 

$results = array(); 
$allResults = array(); 
$params = array(); 

$meta = $stmt->result_metadata(); 
if ($meta) 
{ 
    while ($field = $meta->fetch_field()) 
    { 
     $allResults[$field->name] = null; 
     $params[] = &$allResults[$field->name]; 
    } 
    call_user_func_array(array($stmt, 'bind_result'), $params); 
} 

while ($stmt->fetch()) 
{ 
    $results[] = $allResults; 
} 

$stmt->free_result(); 
0

Хотя PHP-код действительно несовместим, все же очень мало смысла иметь две разные функции для возврата одного и того же значения. Итак, мы можем заключить, что fetch() возвращает не то же самое, что get_result(). Сделав вывод, что мы можем проверить наше предположение, используя страницу руководства. И найти там правильное использование для выборки()

0

mysqli_stmt::fetch возвращает булево значение, и они надевают Не принимайте никаких параметров. Вы можете видеть это в документации. Если вам нужно передать инструкцию sql, то mysqli_stmt_fetch - это ваша функция, которая принимает mysqli_stmt в качестве аргумента.

Вы должны использовать

$stmt->bind_result($field1, $field2); 
    while($stmt->fetch()){ 
    $result[] = array($field1,$field2); 
    } 

Вы можете найти более подробную информацию here

Смежные вопросы