【问题标题】:mySQL syntax issue in PDO script [duplicate]PDO 脚本中的 mySQL 语法问题 [重复]
【发布时间】:2019-12-28 19:45:27
【问题描述】:

此 PDO 脚本似乎编写正确,但我一直收到语法错误,没有生成 json 数组。

  $stmt = $pdo->query('SELECT `person`,
       sum( `stat` = "Ready" ) as Num1
        from `Table1`
        WHERE `code` = :code AND
        (`stat` = "Ready")
        group by `person`
        Order by `Num1` DESC ');

  $stmt->execute([
      'code' => $_POST['code']
      ]);

  $row = $stmt->fetchAll(PDO::FETCH_ASSOC);

  echo json_encode($row);

这是我收到的错误消息:

Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]

【问题讨论】:

  • 添加完整的错误信息。 (不仅是第一部分)
  • stat = "Ready" 或 status = "Ready"(选择和位置不同)?
  • 尝试更改status = "Ready" in status = 'Ready' (单引号)
  • @scaisEdge 这样做是否正确,$stmt = $pdo->query 用于查询然后$stmt->execute
  • @scaisEdge 我得到的整个错误信息是:Fatal error</b>: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2031 '

标签: php mysql pdo


【解决方案1】:

记住命名参数在执行数组键中需要: 所以:code 而不是code

$stmt = $pdo->query('SELECT `person`,
       sum( `stat` = "Ready" ) as Num1
        from `Table1`
        WHERE `code` = :code AND
        (`stat` = "Ready")
        group by `person`
        Order by `Num1` DESC ');

  $stmt->execute([
      ':code' => $_POST['code']
      ]);

  $row = $stmt->fetchAll(PDO::FETCH_ASSOC);

对于json你可以

  $myJson = json_encode($row);

【讨论】:

  • 谢谢,它成功了,非常快速的问题,如何让 json 数组中的所有值都以字符串形式出现?有什么标准可以放在 PDO 的末尾吗?
  • @JamieMills 用于 json 字符串,您可以使用 json_encode($row) 如果我的回答是正确的,请(过去 15 分钟)将其标记为已接受...看看这里如何meta.stackexchange.com/questions/5234/… .. 回答更新为 json
  • 我做 json_encode($row);但即使我的 SELECT 查询选择了数字,我也希望它们周围有双引号。 示例: " 2 " 不是 2
  • 为什么投反对票???' .. json 是标准的 .. 所以数字没有双引号 .. 只有字符串有双引号
  • 我可以强制数字也是双引号吗?
猜你喜欢
  • 2020-03-21
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 2012-11-04
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
相关资源
最近更新 更多