Как создать простую функцию для запроса базы данных?Мой не работает! - PullRequest
1 голос
/ 15 сентября 2010

Я хочу сделать простую функцию, которую я могу вызывать для запроса к моей базе данных. Я передаю ему часть запроса where и в приведенном ниже коде моя переменная $ q верна. Тем не менее, что я должен делать, чтобы иметь возможность использовать данные? Я так запутался в том, как сделать что-то, я уверен, что это очень легко. Любая помощь с благодарностью!

function getListings($where_clause)
{
 $q = "SELECT * FROM `listings` $where_clause";
 $result = mysql_query($q,$dbh);
 foreach (mysql_fetch_array($result) as $row) {
  $listingdata[] = $row;
 }
 return $listingdata;
}

Ответы [ 5 ]

2 голосов
/ 15 сентября 2010

Ваша функция должна быть такой:

function getListings($where_clause, $dbh)
{
    $q = "SELECT * FROM `listings` $where_clause";

    $result = mysql_query($q, $dbh);

    $listingdata = array();
    while($row = mysql_fetch_array($result))
        $listingdata[] = $row;

    return $listingdata;
}

Улучшения вашей функции:

  1. Добавляет ссылку MySQL $dbh в аргументах функции. Passit, иначе запрос не будет работать.
  2. Используйте while цикл вместо foreach. Подробнее здесь.
  3. Инициализируйте массив listingdata, чтобы при отсутствии возвращаемых строк вы все равно получали пустой массив вместо ничего.
0 голосов
/ 29 марта 2019

Вот функция, которая сэкономит вам время. Сначала имя таблицы аргумента, затем условие (где), поля и порядок. Простой запрос будет выглядеть так: query_db ('tablename');

  function query_db($tbl_name,$condition = "`ID` > 0",$fields = "*",$order="`ID` DESC"){

    $query="SELECT ".$fields." FROM `".$tbl_name."` WHERE ".$condition." ORDER BY".$order;
    $query=$con->query($query);
    $row_data=array();
    while($rows = $query->fetch_array()){
        $row_data[] = $rows;
    }
    return $row_data;
}
0 голосов
/ 15 сентября 2010

Вам нужно использовать while, а не foreach, с mysql_fetch_array, иначе будет выбрана только первая строка, и вы будете перебирать столбцы в этой строке.1006 *

$q = "SELECT * FROM `listings` $where_clause";
$result = mysql_query($q,$dbh);
while (($row = mysql_fetch_array($result)) != false)
{
  $listingdata[] = $row;
}
0 голосов
/ 15 сентября 2010

Всегда добавляйте обработку ошибок в ваш код .Таким образом, вы увидите, что происходит не так.

    $result = mysql_query($q,$dbh);
    if (!$result) {
            trigger_error('Invalid query: ' . mysql_error()." in ".$q);
    }
0 голосов
/ 15 сентября 2010

У вас есть действующее соединение с БД? Вам нужно создать соединение (очевидно, с именем $ dbh) внутри функции, передать его в качестве аргумента или загрузить его в область действия функции как глобальное, чтобы $result = mysql_query($q,$dbh); заработал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...