繁体   English   中英

一个PHP文件中包含多个MySQL查询

[英]Multiple MySQL queries in one PHP file

我正在尝试创建一个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;
    }
}

您的case块中没有break语句。 当执行“ adduser”时,控制权转到“ test”,并且$conn为空

https://www.tutorialrepublic.com/php-tutorial/php-switch-case-statements.php

case 'test':替换为以下内容:

break;
case 'test':

如果在执行MySQL查询的switch语句中添加另一种情况,则会发生致命错误:在null上调用成员函数prepare()。

那是因为您正在执行$conn = null; 在每种情况下都要陈述,主要是因为没有break; 开关盒中的语句。 不间断break; 语句,所有下游案例(从匹配点开始)将被执行。 因此,您的代码块应如下所示:

if(isset($_POST['action']) && !empty($_POST['action'])) {
    $action = $_POST['action'];
    switch($action){
        case 'namecheck': 
            ...
            break;
        case 'adduser': 
            ...
            break;
        case 'test':
            ...
            break;
    }
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM