PHP数据库查询报错:Undefined variable: word的原因是什么?
分析 "Undefined variable: word" 错误的原因
咱们先拆解这个错误的核心,再顺便揪出代码里其他潜在的问题:
1. 变量未初始化的直接原因
你把$word = $_POST['word'];放在了if(isset($_POST['submit']))的条件块里——这就意味着:
- 当页面第一次加载(还没点击提交按钮)时,
$_POST['submit']不存在,这个条件不成立,$word根本没被定义。 - 之后代码执行到第7行的
$sql = "SELECT FROM word WHERE word = $word";时,PHP找不到$word这个变量,自然抛出"Undefined variable"的警告。
2. 代码里的其他致命问题
除了这个变量错误,你的代码还有两个关键问题必须修复:
- SQL语法错误:
SELECT关键字后面必须指定要查询的字段(比如SELECT *或者具体字段名SELECT word, definition),直接写SELECT FROM是无效的。 - SQL注入风险 + 字符串未转义:
$word是用户输入的字符串,直接拼到SQL语句里会触发语法错误(字符串没加引号),还会导致严重的SQL注入漏洞。正确的做法是用预处理语句,或者至少用mysqli_real_escape_string()转义后再拼接。
修复后的参考代码示例
给你改个基本可用的版本,你可以参考:
<?php // 先引入配置文件,放在开头更合理 include '../include/config.php'; // 初始化变量,避免未定义警告 $word = ''; $message = ''; if(isset($_POST['submit'])) { // 转义用户输入,防止SQL注入和语法错误 $word = mysqli_real_escape_string($connect, $_POST['word']); // 修正SELECT语句,指定字段,给字符串加引号 $sql = "SELECT * FROM word WHERE word = '$word'"; $fetch = mysqli_query($connect, $sql); if($fetch && mysqli_num_rows($fetch) > 0) { $message = "找到匹配的单词: " . $word; } else { $message = "数据库中不存在该单词"; } } ?> <form name="word-Add" method="POST" action=""> <input type="text" name="word" placeholder="Type the Word" value="<?php echo htmlspecialchars($word); ?>"><br><br> <input type="submit" name="submit" id="submit" value="Search Word"><br><br> <?php if($message): ?> <p><?php echo $message; ?></p> <?php endif; ?> </form>
内容的提问来源于stack exchange,提问作者user6519589
相关产品推荐
相关产品推荐

