select查询不起作用

vnjpjtjt  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(361)

我似乎无法使我的查询工作。当我使用$sth->execute()时;我确实得到了一本书,但据我所知,它对我的目标来说毫无价值。如果使用query,则不会显示任何内容。请记住,我是一个初学者,当谈到编码。而且,这只是学校的一个项目。
我不知道为什么第一行代码不能实现,所以请将下面的行作为代码的一部分:

$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];
biswetbf

biswetbf1#

这段代码应该会因为错误而崩溃,所以如果你想知道为什么它“不起作用”,首先要检查的是你的错误日志。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");

现在有一个列名 odds1 以及 team1 通常是违反了数据库规范化的零、一或无限规则的标志。一个适当的范式将在一个记录和其他记录之间具有一对多的关系。

h4cxqtbf

h4cxqtbf2#

改变

echo $values[odds1];

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

相关问题