2014-10-05 3 views
0

У меня возникли проблемы с использованием PDO на основе функцииPHP PDO MSSQL подготовил заявление

моя GetCurrentLanguage() функция возвращает Int 0 или 1

public function GetCurrentLangName() 
{ 
    $stmt = $GLOBALS['website']->prepare("SELECT * FROM available_languages WHERE id = :id"); 
    $stmt->bindParam(':id', $this->GetCurrentLanguage(), PDO::PARAM_INT); 

    $stmt->execute(); 
    $fetch = $stmt->fetchAll(); 
    return $fetch['name']; 
} 

и не работает, он возвращает

Примечание: Не определено индекс: имя

+0

Вы можете либо [проверить руководство] (http://php.net/manual/en/pdostatement.fetchall.php), либо 'var_dump ($ fetch)', чтобы узнать, что произойдет ... в вашем случае 'fetchAll' возвращает все rowS как массив, поэтому это массив массива. Возможно, вам придется использовать '$ fetch [0] ['name']' (если вы уверены, что, конечно, будет возвращена хотя бы одна строка). – Passerby

ответ

2

Если вы ехр используя много строк, вы могли бы просто зациклировать его.

public function GetCurrentLangName() 
{ 
    $data = array(): 
    $stmt = $GLOBALS['website']->prepare("SELECT * FROM available_languages WHERE id = :id"); 
    $stmt->bindParam(':id', $this->GetCurrentLanguage(), PDO::PARAM_INT); 

    $stmt->execute(); 
    $fetch = $stmt->fetchAll(PDO::FETCH_ASSOC); 

    foreach($fetch as $row) { 
     $data[] = $row['name']; 
    } 
    return $data; 
} 

Эта функция (->fetchAll()) возвращает мульти-мерный массив. Может выглядеть следующим образом:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => lang 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [name] => lang 
     ) 
) 

Может быть использовано print_r()/var_dump() на $fetch, и вы увидите, что он принес.

+0

возвращает строку «Array» – user3811098

+0

@ user3811098 да это! потому что это не строка! его массив, используйте 'print_r()', и вы увидите! – Ghost

+0

хорошо, но, похоже, возвращает Array() 1, может быть, что-то не так с моим подключением к базе данных? как я могу проверить наличие ошибок? – user3811098

0

вы должны установить параметр в качестве параметра, который вы хотите связать.

public function GetCurrentLangName($id) 
{ 
    $stmt =  $GLOBALS['website']- >prepare("SELECT * FROM  available_languages WHERE id = :id"); 
    $stmt->bindParam(':id', $id,  PDO::PARAM_INT); 

$stmt->execute(); 
$fetch = $stmt->fetchAll(); 
return $fetch['name']; 

}

+0

действительно, но параметр $ this-> GetCurrentLanguage(), он не может работать так? Редактировать: попробовал этот путь, но проблема perssists – user3811098

0

fetchAll() возвращает двумерный массив, поэтому вместо того, чтобы вернуться $fetch['name']; он должен быть return $fetch[0]['name']; или лучше использовать fetch возвращать одну строку:

$fetch = $stmt->fetch(); 
return $fetch; 

затем использовать функцию, как это :

$data = GetCurrentLangName(); 
$language = $data['name']; 
+0

Примечание: Неопределенное смещение: 0 для возврата $ fetch [0] ['name']; и пустой результат, когда я просто использую return $ fetch – user3811098

+0

Внимательно прочитайте мой ответ, если вы используете выборку, вам не нужно использовать индекс 0. Пожалуйста, прочтите его – meda

+0

Если вы используете fetchall, вам это понадобится, поэтому я рекомендую вам использовать fetch() – meda