Ах, я вижу, вы не один с базой данных.Давайте выполним упражнение.
Закройте глаза, вдохните, выдохните.
Расслабьтесь.
Вы один с базой данных.
Вы один с кодом.
Повторите за мной.
Приготовьтесь.
Привязка.
Выполните.
Повторите это.
Снова.
Это ваша новая мантра , мой друг.
Вы случайнопропустил шаг в вашем существующем коде.Давайте выбросим его и начнем все сначала.
Я собираюсь показать вам, как использовать 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
, если хотите, и не испытывать слишком много проблем.
Поймите, что вы захотите добавить соответствующее обнаружение ошибок в этот код.Я опустил это здесь для краткости.