我正在尝试创建一个PHP文件,该文件可以根据通过POST发送的数据执行不同的MySQL查询。如果我在执行MySQL查询的switch语句中添加另一个案例,我会收到致命错误:在null上调用成员函数prepare()。 connection.php包含$ conn。
我真的不知道,为什么会发生这种情况,所以如果有人可以提供帮助,我会很高兴:)
require_once('connection.php');
function namecheck($conn, $username)
{
try {
$sql = "SELECT username FROM users WHERE username = ?";
$stmt = $conn->prepare($sql);
$stmt->execute(array($username));
$result = $stmt->fetch();
} catch (PDOException $e) {
return $sql . "<br>" . $e->getMessage();
}
$conn = null;
if ($result !== false) {
return True;
} else {
return False;
}
}
if (isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch ($action) {
case 'namecheck': //works
$username = $_POST['username'];
$result = namecheck($conn, $username);
if ($result == True) {
echo 'True';
} elseif ($result == False) {
echo 'False';
}
case 'adduser': //script still works
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$username = $_POST['username'];
$password = $_POST['password'];
try {
$sql = "INSERT INTO users (username, password) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
$stmt->execute(array($username, $password));
} catch (PDOException $e) {
return $sql . "<br>" . $e->getMessage();
}
$conn = null;
case 'test': //Same as above. if added, fatal error
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$username = $_POST['username'];
$password = $_POST['password'];
try {
$sql = "INSERT INTO users (username, password) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
$stmt->execute(array($username, $password));
} catch (PDOException $e) {
return $sql . "<br>" . $e->getMessage();
}
$conn = null;
}
}
答案 0 :(得分:0)
您的案例块中没有break
语句。当&#34; adduser&#34;案件执行,控制进入&#34;测试&#34;并且$conn
在那里为空
https://www.tutorialrepublic.com/php-tutorial/php-switch-case-statements.php
将case 'test':
替换为以下内容:
break;
case 'test':
答案 1 :(得分:0)
如果我在执行MySQL查询的switch语句中添加另一个案例,我会收到致命错误:在null上调用成员函数prepare()。
那是因为你在每个案例中执行$conn = null;
语句,主要是因为你的switch案例中没有break;
语句。如果没有任何break;
语句,将执行所有下游情况(从匹配点开始)。所以你的代码块应该是这样的:
if(isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch($action){
case 'namecheck':
...
break;
case 'adduser':
...
break;
case 'test':
...
break;
}
}