我正在开发一个数据库驱动的网站。我了解 php 和 mysql 的基础知识。现在我想问几件事。就像,
我在 sql 中创建了一个名为“news”的表,其中包含以下字段:
id (int)
newstitle (varchar)
newscontent (varchar)
dateadded (date)
注意添加的日期仅包含日期。
我使用 php pdo 创建了一个查询,如下所示
$query = $pdo->prepare("SELECT * FROM news ORDER BY dateadded DESC LIMIT 5");
上面的查询给了我错误,这是关于错误的 MySql 语法。正确的查询格式是什么?我想要做的是从“新闻”表中按日期和时间降序仅获取 5 条记录,并且日期已存储在“添加日期”字段中,例如“2019-01-03”我还想存储时间并相应地按日期和时间降序查询我的结果?最后我想使用 PHP PDO while 循环显示记录。
我们将非常感谢您的帮助。
P.S.(抱歉英语不好,如果您看到任何错误或格式错误,请随时编辑)
最佳答案
已更新
您应该为查询选择数据库
有三种方法
1-创建PDO
对象时
`$pdo = new PDO("mysql:server=服务器名;dbname=你的数据库名","用户名","密码");
2次运行查询使用数据库
在查询运行之前$pdo->query('use databasename
);
3-将数据库名称添加到您的查询中
$query = $pdo->query("SELECT * FROM databasename.news ORDER BY dateadded DESC LIMIT 5");
另请注意
您应该使用query
方法而不是prepare
,并调用fetchAll
或fetch
来获取记录
$query = $pdo->query("SELECT * FROM news ORDER BY dateadded DESC LIMIT 5");
$rows = $query->fetchAll(); // or you can use `fetch` and get records one by one
prepare
用于参数绑定(bind),可以用它来避免sql注入(inject)
以及添加用户输入数据进行查询
例如
$query = $pdo->prepare("SELECT * FROM news WHERE id = ? ORDER BY dateadded DESC LIMIT 5");
$query->execute([$_GET['id']]);
$rows = $query->fetchAll(); // or you can use `fetch` and get records one by one
有两种方法可以设置绑定(bind),第一种使用 ?
作为参数,第二种使用名称绑定(bind)并将 assoc 数组传递给 execute
您也可以将它用于您的查询
,但它会增加一行代码
$query = $pdo->prepare("SELECT * FROM news ORDER BY dateadded DESC LIMIT 5");
$query->execute(); //note: there is not any parameter binding, nothing passed
$rows = $query->fetchAll(); // or you can use `fetch` and get records one by one
关于php - PDO MYSQL 查询格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54496320/