MySQL для подключения кода MySQL не удается? - PullRequest
1 голос
/ 09 апреля 2011

Я видел этот код , который плавал вокруг, а также версию fixed? . В основном я получил это на работу:

mysql_connect("host","client_name","client_pw");

mysql_select_db("database");

$q=mysql_query("SELECT * FROM table");

while($e=mysql_fetch_assoc($q))

$output[]=$e;

print(json_encode($output));

mysql_close();

но почему-то я чувствую, что это должно быть в mysqli. Я новичок и попытался написать эквивалентный OO-код mysqli:

$mysqli = new mysqli("host", "client_name", "client_pw");
$mysqli->select_db("database");

$q = "SELECT * FROM table";

 while($e=$mysqli->fetch_assoc($q))
            $output[]=$e;
     print(json_encode($output));
    mysql_close();

Не удалось. Я пробовал другие комбинации, например, готовил запрос и выполнял его, и устанавливал его как $ e, но все не удалось.

Нужно ли вручную создавать массив для json_encode или чего-то еще?

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

Ответы [ 3 ]

1 голос
/ 09 апреля 2011

Ах, я вижу, вы не один с базой данных.Давайте выполним упражнение.

Закройте глаза, вдохните, выдохните.

Расслабьтесь.

Вы один с базой данных.

Вы один с кодом.

Повторите за мной.

Приготовьтесь.

Привязка.

Выполните.

Повторите это.

Снова.

Это ваша новая мантра , мой друг.

Вы случайнопропустил шаг в вашем существующем коде.Давайте выбросим его и начнем все сначала.

Я собираюсь показать вам, как использовать PDO , один из лучших способов взаимодействия PHP с базой данных.Это меньше запутанных , чем расширение mysqli.

// Make sure these variables contain the correct data.
    $pdo = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
// Ask PDO to throw exceptions instead of warnings.
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Here's our SQL.  We're getting back a PDOStatement object here.
    $sh = $pdo->prepare('SELECT * FROM Foo WHERE bar = ?');
// That question mark is a placeholder.  bindValue lets us replace the question mark
// with the specified data.  This is called a prepared statement.  The end result is
// *complete and total immunity* from SQL Injection, if performed correctly.
    $sh->bindValue(1, "I'm looking for a bar that is equal to this.");
// Okay, we've bound everything, let's run the query.
    $sh->execute();
// And assuming there are no errors (note my severe lack of error handling),
// we should now have our complete list of data from the database.
    print_r($sh->fetchAll(PDO::FETCH_ASSOC));

// Alternatively, we could pass bound variables as an array to execute:
    $sh = $pdo->prepare('SELECT * FROM Foo WHERE bar = ?');
    $sh->execute(array( "I'm a bar!" ));

// And of course, we can use variables in the binding...
    $bar = 746;
    $sh = $pdo->prepare('SELECT * FROM Foo WHERE bar = ?');
    $sh->bindValue(1, $bar);
    $sh->execute();

Поддержка PDO для подготовленных операторов и заполнителей делает его одним излучший выбор для доступа к базе данных в современном PHP.

(mysqli также имеет доступ к подготовленным операторам , но заставляет также связывать переменные результата , и это может быть чертовски неудобно вмного обстоятельств.)

fetchAll(PDO::FETCH_ASSOC) возвращает многомерный массив.Внешний массив имеет числовой индекс, каждое значение является строкой.Каждая строка представляет собой массив с строковыми ключами, где ключи - это имена столбцов, а значения - данные из базы данных. Есть еще несколько вещей, которые fetchAll может сделать , хотя я не нашел многих из них полезными.Вы также можете извлекать по одной строке за раз

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

Поймите, что вы захотите добавить соответствующее обнаружение ошибок в этот код.Я опустил это здесь для краткости.

0 голосов
/ 03 октября 2011
$q=mysql_query("SELECT * FROM table");

Вот как это сделать с mysqli ООП После строки $ q = и т. Д. - добавьте следующий код ..

<?php
$result=$mysqli->query($q);
while($e=$result->fetch_assoc()){
              $output[]=$e;
}
 print(json_encode($output));
?>
0 голосов
/ 09 апреля 2011
try
{

   $db = new mysqli("your_host_ip", "your_username", "your_pass", "your_db", 3306);

   if ($db->connect_errno) throw new exception(sprintf("Could not connect: %s", $db->connect_error));

   $sqlCmd = "select * from users order by username";

   $result = $db->query($sqlCmd);

   if(!$result) throw new exception(sprintf("Invalid query : %s", $sqlCmd));

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