连接成功时,mysqli和pdo返回0

时间:2018-09-04 14:27:19

标签: php mysql mysqli pdo

我正在尝试从托管在Mamp中的mysql localhost服务器访问下表。我尝试了多种方法,但是它们似乎都提供了相同的结果(“ 0结果”)。我究竟做错了什么?我同时提供了PDO和mysqli方法,如果有人可以查明错误,我将非常感激!

CREATE TABLE `Orders` (
    OrderID INT(11),
    ParentOrderID INT(11),
    AccountID INT(11),
    RestaurantID INT(11),
    EmployeeID INT(11),
    -- CouponID INT(11),
    BillingID INT(11),
    ShippingID INT(11),
    CreateDate TIMESTAMP,
    OrderTime TIMESTAMP,
    IsTimeOrder BIT,
    IsDelivery BIT,
    PRIMARY KEY (OrderID)
)   ENGINE = INNODB;

我尝试使用的mysqli脚本

<?php

$servername = "localhost";
$port = "3306";
$schema = "es_test";
$username = "root";
$password = "root";

$conn = new mysqli($servername, $username, $password, $schema, $port);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} else {
    echo "Connected successyfully <br>";
}

$sql = "
    SELECT
        *
    FROM
        `es_test`.`Orders`
    SORT BY
        `OrderID` ASC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        echo "OrderID: " . $row["OrderID"] . " - CreateDate: " . $row["CreateDate"] . "<br>";
    }
} else {
    echo "0 results";
}

$conn->close();

和PDO代码

<?php
class Order{
    private $conn;
    private $table_name = "orders";
    //tableheaders

    public function __construct($db){
        $this->conn = $db;
    }

    function read(){
        $query = "
            SELECT 
                *
            FROM
                " . $this->table_name;

        $stmt = $this->conn->prepare($query);
        $stmt->execute();
        return $stmt;
    }
}

为什么总是总是返回0个结果?是我的MySQL服务器不断拒绝它吗?

1 个答案:

答案 0 :(得分:3)

您使用

/etc/rc.d/rc.local

在SQL中,语法应为:

nano /etc/rc.d/rc.local

请参见https://dev.mysql.com/doc/refman/8.0/en/select.html

在每次调用SORT BY ORDER BY query()之后,您还应该检查错误情况。否则,使驱动程序在出现错误时引发异常。

在Mysqli中,您可以通过以下方式启用报告模式:在连接之前

prepare()

我测试了您的代码,并在启用异常时得到了此信息:

execute()

它返回单词mysqli_report(MYSQLI_REPORT_ALL); $conn = new mysqli(...); 的错误,因为它认为您使用Fatal error: Uncaught mysqli_sql_exception: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BY `OrderID` ASC' at line 5 in /Users/bkarwin/p.php:26 作为上一张表的表别名。

在PDO中,您可以通过在连接后在错误 上启用异常来实现此目的:

BY

如果不启用自动异常,则必须检查SORTtry { $dbh = new PDO($dsn, $user, $password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); } query()的返回值,如果出现错误,它们将返回FALSE。在Mysqli和PDO中也是如此。


发表评论:

如果您正确使用了SQL,则PDO代码应该起作用。但是我会写得有些不同:

prepare()

我假设您要像在Mysqli代码中一样使用execute()

在构建SQL查询时,我避免在PHP中将字符串连接与function read(){ $query = " SELECT * FROM `{$this->table_name}` ORDER BY OrderID ASC"; $stmt = $this->conn->prepare($query); $stmt->execute(); return $stmt->fetchAll(PDO::FETCH_ASSOC); } 一起使用。字符串连接很容易引入错误。

我还将从此函数返回获取的行,而不是返回语句,以简化调用代码。