PDO MySQL查询格式化

时间:2019-02-02 18:44:15

标签: php mysql

我开发一个数据库驱动的网站。我知道有关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显示记录。

我们将不胜感激。

P.S.(抱歉英语不好,如果您看到任何错误或格式错误,请随时进行编辑)

2 个答案:

答案 0 :(得分:2)

已更新

您应该选择要查询的数据库

有三种方法

1-创建PDO对象时

`$ pdo =新的PDO(“ mysql:server =服务器名称; dbname =您的数据库名称”,“用户名”,“密码”);

2次查询use database

查询运行之前$pdo->query('use databasename);

3-为查询添加数据库名称

$query = $pdo->query("SELECT * FROM databasename.news ORDER BY dateadded DESC LIMIT 5");

也请注意

您应使用query而不是prepare方法,并调用fetchAllfetch来获取记录

$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用于参数绑定,您可以使用它来避免sql injection并添加用户输入数据进行查询

例如

$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

有两种方法来设置绑定,首先使用?作为参数,然后使用名称绑定并将assoc数组传递给execute

您也可以将其用于query,但这会将代码增加了一行

$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

http://php.net/manual/en/book.pdo.php

答案 1 :(得分:0)

我从过程PHP开始使用PHP,现在我正在使用面向对象的PHP。如果可以,请回答我吧

您可以逐步查看我的代码,一切都很清楚:-

1。创建连接。

2。写查询。

3。为查询准备语句。

4。清理并绑定查询的参数(在数据库中插入的情况下)     在查询中不使用任何变量时,无需进行选择。

5。执行查询。

6。根据需要获取数据。

           // select all query
           $query = "SELECT * FROM news ORDER BY dateadded DESC LIMIT 5"";

          // prepare query statement
          $stmt = $pdo->prepare($query);

          // execute query
          $stmt->execute();

          // Fetch data according to your need
          $num = $stmt->rowCount();

          if($num>0){

            while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

           // extract row this will make $row['newstitle'] to just $newstitle only 

           extract($row);

           $data = array(
                "newstitle" => $newstitle,
                "newscontent " => $newscontent ,
                "dateadded" => $dateadded,

                       );

              array_push($data_arr, $);

                } //while loop closed
            } //if statement closed