在我的搜索框中,用户可以搜索以查看项目是否在数据库中。如果输入的项目名称匹配,则代码可以正常工作。问题是他们输入的项目名称与数据库中的任何项目名称都不匹配。
<?php $name = $_GET['search'];
$name = strtolower($name);
$name = ucfirst($name) ;
$dbQuery = $db->prepare("select * from names WHERE Item_Name = '$name'");
$dbQuery->execute();
while ($dbRow = $dbQuery->fetch(PDO::FETCH_ASSOC)){
$Item_name = $dbRow['Item_Name']; }
if ($Item_name == $name) {
echo "Name is in database";
} else {
echo "Name is not in database";
}
?>
当$ Item_name与$ name匹配时,消息将成功打印。当它们不匹配时,它会显示“Undefined variable:Item_name”。我不知道为什么会这样。有人可以帮忙吗?
答案 0 :(得分:-1)
这是因为当数据库中不存在该名称时,while
循环未被执行。因此,变量$Item_name
不会在任何地方初始化。
您可以在$Item_name = null;
循环之前添加while
来解决此问题。这样,$Item_name
始终被初始化。
注意:使用此代码,您很容易受到SQL injection攻击。你应该使用这样的预备语句:
$dbQuery = $db->prepare("select * from names WHERE Item_Name = ?");
$dbQuery->execute(array($name));
这样,PDO会小心处理输入,以便某些恶意输入不会丢弃您的数据库等等。