【问题标题】:SELECT Query doesn't work MySQLSELECT 查询不起作用 MySQL
【发布时间】:2018-05-28 15:58:28
【问题描述】:

我似乎无法让我的查询工作。当我使用 $sth->execute();我确实得到了阅读,但据我所知,这对我的目标毫无价值。如果我使用查询,则没有任何显示。请记住,在编码方面我是初学者。此外,这是一个学校项目,仅此而已。

我不知道为什么第一行代码不会被实现,所以看看下面一行作为代码的一部分:

$team1 = $_POST['teamname'];
$sth = $pdo->prepare("SELECT odds1 FROM odds WHERE :team1=team1");
$sth->bindParam(':team1', $team1);
$sth->query();
$values = $sth->fetchAll(PDO::FETCH_ASSOC);                 
echo $values[odds1];

【问题讨论】:

  • 不是WHERE team1= ':team1'吗?
  • 变量应该在等号的右边。 "从赔率 WHERE team1=:team1 中选择赔率 1"
  • 还有 $values[0]["odds1"] (当然你应该先检查一下);
  • @PrashanthBenny 你不需要 pdo 的引号
  • @PrashanthBenny 您的错误推荐获得了如此多的支持,这有点令人担忧。 PDO 从来没有这样工作过。占位符从来没有这样工作过。

标签: php mysql pdo prepared-statement


【解决方案1】:

这段代码应该会因错误而崩溃,所以如果您想知道为什么它“不起作用”,首先要检查的是您的错误日志。 PHP 将在那里输出各种有助于调试的警告和错误,所以如果你不知道现在是时候找出来了。

技术修复是 query() 是在语句句柄上运行的错误方法。相反,你打电话给execute():

$sth = $pdo->prepare("SELECT odds1 FROM odds WHERE :team1=team1");
$sth->bindParam(':team1', $team1);
$sth->execute();

你实际上可以最小化这个:

$sth = $pdo->prepare("SELECT odds1 FROM odds WHERE :team1=team1");
$sth->execute([ ':team1' => $team1 ]);

这是因为execute 可以接受一个参数数组。

SQL 中的参数顺序通常是column=?,但您可以按任意顺序执行此操作,MySQL 的比较是双向的。如果您将查询编写为:

$sth = $pdo->prepare("SELECT odds1 FROM odds WHERE team1=:team1");

现在有像odds1team1 这样的列名通常表明您违反了Zero, One or Infinity Ruledatabase normalization。一个适当的范式将在一个记录和其他记录之间具有一对多的关系。

【讨论】:

  • @PrashanthBenny 感谢您清理。
  • 赞赏 :-)
  • 这是两个同类型实体之间的关系。尝试对其进行规范化,您将获得 1 对 2 关系 - 这将违反 零、一或无穷大规则。但无论如何都是好答案。
  • 如果是两个实体之间的关系,则要么是一对一的(例如 x 和 y 相关,但每个 x 只有一个 y,反之亦然)或一对多.如果“很多”在所有实际情况下都是两个,那很好。关系理论中没有“二”。
【解决方案2】:

改变

echo $values[odds1];

echo "<p>Results:<pre>".print_r($values[odds1],true)."</pre></p>\n";

【讨论】:

    猜你喜欢
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多