我的代码:
<?php
$name = $_POST["name"];
//establishing connection through PDO
require("database.php");
try{
//querying the firstname data from the people table
$sql = $conn->query("SELECT firstname FROM people");
}catch (Exception $e) {
echo "Data could not be retrieved from the database.";
exit;
}
//looping through the array of firstname and echoing it out if it equals to the user input of name. else just echo out sorry no match
while($theRow = $sql->fetch(PDO::FETCH_ASSOC)){
if(strtolower( $name ) == strtolower( $theRow["firstname"] ) && isset($_POST['name']) ){
echo $theRow['firstname'] . "<br />";
}else {
echo 'Sorry no match';
exit;
}
}
?>
require database.php只是使用PDO与我的数据库建立连接。
我的数据库中只有两行
的'firstname'
- 杰克
- 鲍勃
并且如果在我的输入字段中任何人键入这两个名称中的一个,那么php将从数据库中的people表中回显出该名称。非常简单,但我唯一的问题是在我的else语句中我希望它回显出抱歉没有匹配如果name的输入字段不等于数据库中的任何名称。相反,它回应出来抱歉每个名字都没有匹配一次。我知道我正在循环遍历数据库名称数组,但如果名称输入不等于数据库中的“firstname”,我只希望它回显抱歉没有匹配。
EXTRA NOTE:
我也尝试过使用foreach循环而不是使用fetchAll方法进行while循环,而不仅仅是获取但没有运气。基本上给了我相同的结果。
更新问题:
当我加载页面时,else语句已经生效了 在我在输入中设置名称之前,回显抱歉没有匹配。 如果我键入了错误的名称,那么如果错误的话,那么就会发出两次抱歉没有匹配 我输入正确的名称,它将从数据库中回显出该名称 和抱歉没有匹配一次。
图示:
<?php
$name = $_POST["name"];
require("database.php");
try{
$sql = $conn->prepare("SELECT firstname FROM people WHERE firstname = ?");
$sql->bindParam(1,$name);
$sql->execute();
}catch (Exception $e) {
echo "Data could not be retrieved from the database.";
exit;
}
$theRow = $sql->fetch(PDO::FETCH_ASSOC);
if(strtolower( $name ) == strtolower( $theRow["firstname"] ) ){
echo $theRow['firstname'] . "<br />";
}else{
echo 'no match';
}
?>
事实证明我甚至不需要循环对WHERE claus只获取匹配$ _POST ['name']的名字,所以这只是何时输出那些数据而且是if语句的时候但如果我不得不输出多个单一数据,我可能会使用foreach循环:
if(strtolower( $name ) == strtolower( $theRow["firstname"] ) ){
foreach( $theRow as $row ){
echo $row . "<br />";
}
}else{
echo 'no match';
}
如果有人发现此代码或我的方法有任何问题,请告诉我们。谢谢
答案 0 :(得分:3)
首先,您似乎回答了自己的问题:为什么else语句运行代码两次?答:不是;它为循环的每次迭代运行一次,因为你把它放在循环中。
只需将您的SQL更改为:
$stmt = $conn->prepare("SELECT firstname FROM people where firstname = ?");
$stmt->execute(array($name));
$result = $stmt->fetchAll();
它会返回1行或0行。因此,您的if
语句将如下所示:
if($result->num_rows) // True if num_rows > 0; else false
将while
循环放在您的if
语句中。将你的else语句保持为echo 'Sorry no match';
。