MySQLi Binding результаты и выборка нескольких строк - PullRequest
4 голосов
/ 04 марта 2010

Я пытаюсь перебрать набор результатов, используя MySQLi и привязку / выборку.

static function getConnection() 
{
    if (!isset(self::$db_conn)) 
    {
        self::$db_conn = new mysqli(self::$DBSERVER,self::$DBUSER,self::$DBPASS, ModelBase::$DBNAME) or die(mysql_error(0)." Error handling database connection. ");
    }
    return self::$db_conn;
}

Выше приведена функция getConnection (). Именно в классе ModelBase этот класс наследуется.

$term = "%".$term."%";
$con = ModelBase::getConnection();
$sql = "SELECT name FROM cities WHERE name LIKE ? LIMIT ?";
$query = $con->prepare($sql) or die("Error preparing sql in City ".parent::$db_conn->error);
$query->bind_param("si", $term, $limit) or die("Error binding params in City ".parent::$db_conn->error);
$query->execute() or die("Error executing query in City");

$tmp = "";
$query->bind_result($tmp);
while($query->fetch());
{
    error_log($tmp);
    echo($tmp."\n");
}
$query->close();

Однако все, что я получаю, это самый последний результат и только один раз. Должно быть более одного результата, и когда я проверяю следующий запрос в phpMyAdmin или в командной строке, я получаю несколько строк.

SELECT name FROM cities WHERE name LIKE %d% LIMIT 150

Эта проблема не появляется, если я изменяю

$ query-> bind_result ($ TMP);

до

$ query-> bind_result (& $ TMP);

Что-то не так с синтаксисом?

Есть ли более простой способ сделать это? Может быть, способ получить объект?

1 Ответ

5 голосов
/ 07 сентября 2010

У вас есть точка с запятой в конце вашего оператора while:

while($query->fetch());

(что, конечно, заставляет $ query-> fetch () вычисляться до тех пор, пока оно не станет истинным, без выполнения кода между фигурными скобками для каждого круга)

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