【问题标题】:PDO MYSQL QUERY FORMATTINGPDO MYSQL 查询格式
【发布时间】:2019-02-02 18:44:15
【问题描述】:

我正在开发一个数据库驱动的网站。我知道关于 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.(抱歉英语不好,如果您发现任何错误或格式错误,请随时编辑)

【问题讨论】:

  • "error which is something about wrong MySql syntax" 这是什么“东西”?
  • Quasimodo 的克隆我在 Windows 上使用 xamp 服务器。当我运行上面的 php 代码时,我得到这样的结果(error code [1046] MySql Query wrong format)
  • 1046 未选择数据库 - 在之前选择(使用)它或使用 FROM database_name.table_name
  • Quasimodo 的克隆所以我的查询将变成这样 ("SELECT * FROM databasename.news ORDER BY date added DESC LIMIT 5") 其中 databasename = 我的真实数据库名称......对???
  • 没错! (评论不要太短)

标签: php mysql


【解决方案1】:

更新

您应该为查询选择数据库

有三种方法

1-创建PDO对象时

`$pdo = new PDO("mysql:server=servername;dbname=你的数据库名","username","password");

2 次运行查询 use database

在您的查询运行之前$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用于参数绑定,可以使用它来避开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

有两种方法可以设置绑定,第一种是使用? 作为参数,第二种是使用名称绑定并将关联数组传递给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

【讨论】:

  • 所以简而言之,你是说因为我没有任何要绑定的参数,所以我应该使用这个方法 "$query = $pdo->query("SELECT * FROM news ORDER BY date added DESC LIMIT 5") ; $rows = $query->fetchAll();"
  • 是的,在query 中使用用户输入数据时,您应该始终使用prepare
  • 谢谢,还有一件事.....我如何在表格的“添加日期”字段中添加时间和日期,例如如果 date added 字段包含“2019-01-03”,我想连同它一起添加时间,并按时间降序相应地查询结果。
  • @Gingitsune 现在是具体时间吗?或者它有不同的行?这个时间是什么?也许你需要datetime 而不是date 来代替dateadded
  • 时间会有所不同。添加日期字段的不同行将类似于“2019-01-03 Time1”、“2019-01-03 Time2”、“2019-01-04 Time3”等。其中 time1、time2 和 time3 将是不同的时间。
【解决方案2】:

我从程序 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多