2013-03-25 4 views
0

У меня есть эта часть кода здесь (я есть, конечно, и т.д., и застройщик созданные объекты)массив возвращает всегда нуль

function searchUsers($term) 
{ 
    $searchUserSQL = "SELECT userID, givenName, familyName from userbase where givenName or familyName = :name"; 
    $searchUserPrepare = $this->prepare($searchUserSQL); 
    $searchUserPrepare->bindParam(':name', $term); 
    $searchUserPrepare->setFetchMode(PDO::FETCH_ASSOC); 
    $searchUserPrepare->execute(); 
    $searchUserResult = $searchUserPrepare->fetchAll(); 
    foreach($searchUserResult as $row){ 
      $row['userBaseData']=$this['givenName']; 
      $results[] = $row; 
     } 
     return $results; 
} 

Но результаты всегда NULL. Когда я тестирую этот qry в PHPmyAdmin, я также не получаю никакого результата.

Но в моей базе данных есть имя столбца с именем userID, givenName и familyName, а также правильный термин поиска. Я не знаю, что я делаю неправильно с моим qry. Любая помощь?

+2

объявите массив $ results перед циклом foreach. $ results = new array(); – Yellowledbet

+0

Можете ли вы var_dump() и опубликовать результаты? – diagonalbatman

+0

добавьте что-то вроде этого: if (! $ SearchUserPrepare-> execute()) echo "выполнить не удалось: (". $ Stmt-> errno. ")". $ Stmt-> ошибка; –

ответ

0
$results = array();  
    foreach($searchUserResult as $row){ 
     $row['userBaseData'] = ??????; 
     $results[] = $row; 
    } 
    return $results; 

Замените ?????? с правильной переменной. Текущее имя var неверно!

Теперь по крайней мере, вы будете возвращать пустой массив ..

+0

он должен изменить $ row тоже, что-то вроде этого foreach ($ searchUserResult как $ this) { $ row ['userBaseData'] = $ this ['givenName']; –

2

SELECT userID, givenName, familyName from userbase where givenName or familyName = :name

Я даже не знаю, как этот запрос будет когда-либо работать, в частности, в ИНЕКЕ.

SELECT 
    u.userID 
    , u.givenName 
    , u.familyName 
FROM `userbase` u 
WHERE u.givenName = :given_name 
    OR u.familyName = :family_name; 

Затем связать $term как к :given_name и :family_name


EDIT Все это вместе (переписать)

function searchUsers($term) 
{ 
    $sql = <<<SQL 
SELECT 
    u.userID 
    , u.givenName 
    , u.givenName AS `userBaseData` 
    , u.familyName 
FROM `userbase` u 
WHERE u.givenName = :given_name 
    OR u.familyName = :family_name; 
SQL; 

    $stmt = $this->prepare($sql); 
    $stmt->bindParam(":given_name", $term, PDO::PARAM_STR); 
    $stmt->bindParam(":family_name", $term, PDO::PARAM_STR); 
    $stmt->execute(); 

    return ($stmt->rowCount() > 0) 
     ? $stmt->fetchAll(PDO::FETCH_ASSOC) 
     : array(); 

} 

EDIT 2

На самом деле не уверен, что вы пытаетесь достичь с $row['userBaseData'] = $this['givenName']

+0

Возможно, это зависит от диалекта СУБД/SQL, но я думаю, что 'where givenName' просто оценил бы содержимое этого столбца как логическое значение в соответствии с правилами системы. – CBroe

+0

Если мы не найдем ничего, это пустой массив, только с помощью rowCount(), который вы узнаете, но это не проблема нулевого массива ... найденного или не найденного, не может быть нулевым ответом на запрос. – rokimoki

+0

@CBroe, возможно, я предполагал MySQL, поскольку он является PHP и PDO и протестировал его на локальном сервере mysql. 'where givenName или familyName = 'something'' не возвращает никаких результатов. – Hayden

0

Я предполагаю, что вы используете PDO, то вы должны подключиться к базе данных первого:

$conector = new connection("server","database"); // Your custom class to connect to a DB 
$con = $conector->connect(); // Return the connector 
$con->exec('SET CHARACTER SET utf8'); // A must have 
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // A must have to handle exceptions and know better the errors that it gives, use try - catch 
$consulta = $con->prepare("SELECT userID, givenName, familyName from userbase where givenName or familyName = :name;"); 
$consulta->bindParam(':name', $name, PDO::PARAM_STR); 
$data = array('name' => $term); 
$consulta->execute($data); 
foreach($consulta as $row){ 
     $row['userBaseData']=$this['givenName']; 
     $results[] = $row; 
} 
return $results; 

Попробуйте этот код.

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