Как сделать запрос из РНР к базе данных MySQL?

179
22 июня 2019, 15:50

Имеется таблица bot в phpMyAdmin. Как правильно составить на php запрос, который извлечет данные столба money определенного user_id?

Например получить значение money для user_id = $id (значение столбца в переменной). После этого, значение money нужно будет поместить в переменную $money.

Можно для примера решение данной ситуации, чтобы потом уже разобраться на готовом примере с остальными запросами?

Answer 1

Для работы с базой данных в РНР служит класс PDO.

Соединение с БД

Для соединения с MySQL надо написать такой код (взят отсюда),

$host = '127.0.0.1';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
     $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
     throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

вписать свои собственные значения для параметров подключения и поместить в файл db.php.

После этого в своем скрипте написать include 'db.php'; и после этого в нем будет доступна переменная $pdo, которая будет использоваться для всех запросов к базе данных.

Выполнение запроса

Выполнение запроса SELECT включает в себя 3 стадии:

  • подготовка запроса, при этом на место всех переменных ставятся знаки вопроса. При этом создается переменная $stmt.
  • выполнение запроса, при котором все участвующие в запросе переменные отправляются отдельно, в виде массива, в метод $stmt->execute().
  • получение запрошенных данных. Данные можно получить тремя разными способами
    • одну строку в виде массива или объекта, $stmt->fetch()
    • массив строк, если запрос может вернуть больше одной строки, $stmt->fetchAll(). После этого полученный массив можно будет вывести через foreach().
    • единственное значение - если мы запрашиваем единственную колонку единственной строки, $stmt->fetchColumn()
    • в очень редких случаях получение может быть выполнено четвертым способом - выборка по одной строке в цикле, но мы его здесь рассматривать не будем.

Это схема для выполнения любых запросов, в которых участвуют переменные. В данном случае код будет таким:

include 'db.php';
$stmt = $pdo->prepare('SELECT money FROM bot WHERE user_id=?'); // подготовка
$stmt->execute([$id]); // выполнение
$money = $stmt->fetchColumn(); // получение
Answer 2
$query = 'SELECT * FROM `bot` WHERE `user_id` = "'.mysqli_real_escape_string($mysqli, $id).'"';

Переменная $mysqli - это ваше подключение к БД, если вы используете подключение к БД, как в примере:

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

Но вам, как начинающему программисту, желательно сразу использовать подключение к БД только через PDO - это более безопасный вариант. В этом случае синтаксис запроса в $query придется немного подредактировать.

Пожалуйста, отредактируйте ваш вопрос так, как я написал в комментарии, и тогда у сообщества Stackoverflow будет больше шансов помочь вам.

READ ALSO
PHP удалённое подключение к MySQL

PHP удалённое подключение к MySQL

положил страницу с вот таким php скриптом на удалённый хостинг

232
Sumfony console, как читать stdin

Sumfony console, как читать stdin

Пишу простое консольное приложение с командами на основе классов Symfony\Component\Console\Command\Command

167
Internal Server Error при вызове in_array

Internal Server Error при вызове in_array

Кто-нибудь сталкивался с проблемой, когда вызов in_array на большом массиве (500 000 элементов) выдает internal Server Error? Вызывается внутри перебора RecursiveIteratorIterator...

169
htaccess wordpress

htaccess wordpress

Всем добрый день ,нужно помощь первый раз сталкиваюсь с такой проблемой У меня на WP имеется страница: http://mysiteru/blog/?category=news После равно может...

174