我试图从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条答案
按热度按时间slsn1g291#
你用
在sql中,语法应为:
看到了吗https://dev.mysql.com/doc/refman/8.0/en/select.html
您还应该在每次调用
query()
或者prepare()
或者execute()
. 或者让驱动程序在出现错误时抛出异常。在mysqli中,您可以在连接之前启用报告模式:
我测试了您的代码,当我启用异常时,我得到了以下结果:
它返回单词的错误
BY
因为它认为你在使用SORT
作为上一个表的表别名。在pdo中,您可以通过在连接后启用错误异常来执行此操作:
如果不启用自动异常,则必须检查
query()
以及prepare()
以及execute()
,如果出现错误,则返回false。在mysqli和pdo中也是如此。请回复您的意见:
如果sql正确,pdo代码应该可以工作。但我会写得有点不同:
我猜你想用
ORDER BY
与mysqli代码相同。我避免使用字符串连接
.
在php中生成sql查询时。字符串串联太容易导致错误。我还将从这个函数返回获取的行,而不是语句,以使调用代码更容易。