【问题标题】:SQL query duplicated on PHP PDO and different from the result on phpmyadminSQL 查询在 PHP PDO 上重复,与 phpmyadmin 上的结果不同
【发布时间】:2019-04-21 18:51:17
【问题描述】:

当我使用 PHP PDO 查询时,我重复了同一数据库行的结果,当我在 phpmyadmin 上执行相同的查询时,我得到 2 个不同的行,这是准确的。

我必须得到与 phpmyadmin 相同的 2 行,但使用 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: 数组 (size=33) 'id' => 字符串 '1' (length=1) 0 => 字符串 '5' (length=1) 'dictionaryId' => 字符串'1'(长度=1)1 =>字符串'1'(长度=1)'名称'=>字符串 'blink' (length=5) 2 => string 'blink' (length=5) 'destinationURL' => string 'github.com' (length=10) 3 => string 'github.com' (length=10) 'domains' => string 'github' (length=6) 4 => string 'github' (length=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' (length=1) 'startDate' => 字符串 '2019-04-18 03:00:00' (length=19)
7 => 字符串 '2019-04-18 03:00:00' (长度=19) 'finishDate' => 字符串 '2019-05-04 00:00:00'(长度=19)8 => 字符串'2019-05-04 00:00:00' (length=19) 9 => 字符串 '1' (length=1) 'it' => 字符串 'Sed tempus libero 一个 tristique placerat。 ' (length=41) 10 => string 'Sed tempus libero 一个 tristique placerat。 ' (length=41) 'en' => 字符串 'Curabitur 在justo 坐在amet mi aliquam 前庭。 ' (长度=52) 11 => 字符串 ' Curabitur at justo sit amet mi aliquam vestibulum。 ' (长度=52)
'fr' => 字符串 'Duis sed elit suscipit, venenatis ipsum vitae, 骚扰精英。 ' (length=63) 12 => string 'Duis sed elit suscipit, venenatis ipsum vitae,molestie 精英。 ' (长度=63) 'es' => 字符串 'Ut ac tortor semper,finibus est ac,porta erat。 '(长度=50)13 => 字符串'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。 ' (长度=63) 'de' => string 'Nulla nec sem quis velit tristique tempus vel id augue。 ' (length=57) 15 => string 'Nulla nec sem quis velit tristique tempus 维尔 id 奥格。 ' (长度=57) 'nl' => 字符串 'Mauris tincidunt leo eget tincidunt bibendum。 ' (长度=47) 16 => 字符串 'Mauris tincidunt leo eget tincidunt bibendum。 ' (长度=47)

【问题讨论】:

    标签: php mysql


    【解决方案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() 的调用都将给出相同的样式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 2021-09-07
      • 2015-09-15
      • 2020-02-15
      • 2020-04-18
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多