#php #mysql
#php #mysql
Вопрос:
Я дублировал результат одной и той же строки БД при запросе с помощью PHP PDO, и когда я выполняю тот же запрос в phpmyadmin, я получаю 2 отдельные строки, что является точным.
Я должен получить те же 2 строки, что и в phpmyadmin, но с pdo, так что вот мой код и мой результат pdo:
try {
$conn = new PDO('mysql:host=mysql;dbname=mydb;charset=utf8mb4', 'root', 'tiger');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$result = $conn->query("SELECT COUNT(*) AS num_rows FROM `banner`");
$numRows = $result->fetchColumn();
if ($numRows > 0) {
$domain = $_GET['domain']; // URL PARAMETER GOES HERE
$myQuery = $conn->prepare(
"SELECT *
FROM
banner B
JOIN dictionary D
ON B.dictionaryId = D.id
WHERE
B.domains = : domains
AND B.dictionaryId IS NOT NULL
AND B.startDate <= NOW ()
AND B.finishDate >= NOW ()
ORDER BY
B.position ASC");
$myQuery->bindParam(':domains', $domain);
$myQuery->execute();
$banner = $myQuery->fetch();
// echo $banner[14];
var_dump($banner);
die;
И это результаты:
/var/www/html/dropbox_db_connection.php:54: массив (размер = 33) ‘id’ => строка ‘1’ (длина = 1) 0 => строка ‘5’ (длина = 1) ‘dictionaryId’ => строка ‘1’ (длина = 1) 1=> строка ‘1’ (длина = 1) ‘name’ => строка ‘blink’ (длина = 5) 2 => строка ‘blink’ (длина = 5) ‘destinationURL’ => строка ‘github.com ‘ (длина=10) 3 => строка’github.com ‘ (длина= 10) ‘domains’ => строка ‘github’ (длина = 6) 4 => строка ‘github’ (длина = 6) ‘ImageUrl’ => строка ‘https://dl.dropboxusercontent.com/apitl/1/ABimtamHV3_o7EnMC3s5tHpYRwMwS8cyZMtfQGlqpxa6yepgnelceukKJbo9eGONQLquiy-iPAFaeK0NT1cmx0RWGu6Z_DzN0-_FLQAkpeLGm7RAYviP6yfuYvGzE9MR32h2a5OyXjJLskWupTS9bGcZzabicGxmleJeuyiOotBQUkFto3gLGgkNxXd0n1O4DdFkUoN1WB4Jijr2UDLiW3w68lAJVUgRYn3lnN393cwWIYzKEQJiphZXmNCPGXOQp7idyt5ft9aLm6bppw5rxsJDJ2Z9VzSEn1LKXyRBOIPpAf9GDqJL6g2zk-cvw7sRia0 ‘ (длина=365) 5 => строка’https://dl .dropboxusercontent.com/apitl/1/ABimtamHV3_o7EnMC3s5tHpYRwMwS8cyZMtfQGlqpxa6yepgnelceukKJbo9eGONQLquiy-iPAFaeK0NT1cmx0RWGu6Z_DzN0-_FLQAkpeLGm7RAYviP6yfuYvGzE9MR32h2a5OyXjJLskWupTS9bGcZzabicGxmleJeuyiOotBQUkFto3gLGgkNxXd0n1O4DdFkUoN1WB4Jijr2UDLiW3w68lAJVUgRYn3lnN393cwWIYzKEQJiphZXmNCPGXOQp7idyt5ft9aLm6bppw5rxsJDJ2Z9VzSEn1LKXyRBOIPpAf9GDqJL6g2zk-cvw7sRia0 ‘ (длина= 365) ‘позиция’ => строка ‘5’ (длина= 1) 6 => строка ‘5’ (длина= 1) ‘Дата начала’ => строка ‘2019-04-18 03:00:00’ (длина=19)
7 => строка ‘2019-04-18 03:00:00’ (длина = 19) ‘finishDate’ => строка ‘2019-05-04 00:00:00’ (длина= 19) 8 => строка ‘2019-05-04 00:00:00’ (длина = 19) 9 => строка ‘1’ (длина = 1) ‘it’=> строка ‘Sed tempus libero a tristique placerat. ‘ (длина = 41) 10 => строка ‘Sed tempus libero a tristique placerat. ‘ (длина = 41) ‘en’ => строка ‘Curabitur at justo sit amet mi aliquam vestibulum. ‘ (длина = 52) 11 => строка ‘Curabitur at justo sit amet mi aliquam vestibulum. ‘ (length=52)
‘fr’ => string ‘Duis sed elit suscipit, venenatis ipsum vitae, molestie elit. ‘ (length=63) 12 => string ‘Duis sed elit suscipit, venenatis ipsum vitae, molestie elit. ‘ (length=63) ‘es’ => string ‘Ut ac tortor semper, finibus est ac, porta erat. ‘ (length=50) 13 => string ‘Ut ac tortor semper, finibus est ac, porta erat. ‘ (length=50) ‘pt’ => string ‘Morbi sit amet quam facilisis, tristique mi a, sagittis quam. ‘ (length=63) 14 => string ‘Morbi sit amet quam facilisis, tristique mi a, sagittis quam. ‘ (length=63) ‘de’ => string ‘Nulla nec sem quis velit tristique tempus vel id augue. ‘ (length=57) 15 => string ‘Nulla nec sem quis velit tristique tempus vel id augue. ‘ (длина = 57) ‘nl’ => строка ‘Mauris tincidunt leo eget tincidunt bibendum. ‘ (длина = 47) 16 => строка ‘Mauris tincidunt leo eget tincidunt bibendum. ‘ (длина = 47)
Ответ №1:
У вас есть 2 проблемы, первая из которых — дублируемая строка, это связано с тем, что по fetch()
умолчанию FETCH_BOTH
используется значение, что означает, что он вернет как ассоциативный набор данных, так и численно индексированный набор данных (оба с одинаковыми значениями). Я обычно использую PDO::FETCH_ASSOC
, поскольку это просто значения, индексируемые именами столбцов.
Во-вторых, вы извлекаете только 1 строку, вызов fetch()
которой обычно выполняется в цикле…
$myQuery->execute();
while( $banner = $myQuery->fetch(PDO::FETCH_ASSOC)) {
// echo $banner['pt'];
var_dump($banner);
}
или установите режим по умолчанию для выборки с помощью
$connection->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
Сделайте это сразу после установления соединения, чтобы все вызовы fetch()
выдавали одинаковый стиль.