SELECT 查询无效 MySQL

SELECT Query doesn't work MySQL

我的查询似乎无法正常工作。当我使用 $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];

改变

echo $values[odds1];

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

这段代码应该会因错误而崩溃,所以如果您想知道为什么会崩溃,"doesn't work"首先要检查的是您的错误日志。 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 Rule database normalization。正确的范式应该是一个记录与其他记录之间的一对多关系。