Php 数据未插入MySQL数据库

Php 数据未插入MySQL数据库,php,mysql,Php,Mysql,我使用的是PHP和PDO,问题是当我单击submit按钮时,数据没有插入数据库。根本没有错误,我不确定是什么原因造成的。我尝试了很多方法,但仍然无法找到解决方案 这是我的代码: <?php function cl($info){ return preg_replace("|[^\w]|", "", $info);

我使用的是PHP和PDO,问题是当我单击submit按钮时,数据没有插入数据库。根本没有错误,我不确定是什么原因造成的。我尝试了很多方法,但仍然无法找到解决方案

这是我的代码:

<?php                           

                       function cl($info){
                        return preg_replace("|[^\w]|", "", $info);
                        }
                        function cl2($info){
                            return preg_replace("|[^\w]|", "", $info);
                        }
                        function check_email($email){
                            $exit = FALSE;
                            if(filter_var($email, FILTER_VALIDATE_EMAIL)){
                                return $exit = TRUE;
                            }
                            else {
                                return $exit;
                            }
                        }

                        if (isset($_POST['register'])) {

                            $errors = [];
                            $username = cl($_POST['username'] ?? '');
                            $password = cl2($_POST['password'] ?? '');
                            $email = $_POST['email'] ?? '';

                            try {
                                $conn = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
                            } catch (PDOException $e) {
                                echo "Failed to get DB handle: " . $e->getMessage() . "\n";
                                exit;
                            }



                            $check_username = $conn->prepare("SELECT * FROM accounts WHERE name = :username");
                            $check_username->bindParam(':username', $username, PDO::PARAM_STR);
                            $check_username->execute();                              

                            if($check_username->rowCount()) {
                                array_push($errors, 'Username already in use, please select a new one.');
                            } else if(empty($username) || strlen($username) < 4 || strlen($username) > 13) {
                                array_push($errors, 'Invalid username, please select another one.');
                            } else if(empty($password) || strlen($password) < 4 || strlen($password) > 20) {
                                array_push($errors, 'Invalid password, please select another one.');
                            } else if(empty($email) || !check_email($_POST['email'])) {
                                array_push($errors, 'Invalid password, please select another one.');
                            }

                            if(empty($errors)) {

                                $query = $conn->prepare("INSERT INTO accounts (name,password,email) VALUES ($username,$password,$email)");
                                $query->bindParam(':username', $username, PDO::PARAM_STR);
                                $query->bindParam(':password', $password, PDO::PARAM_STR);
                                $query->bindParam(':email', $email, PDO::PARAM_STR);
                                $query->execute();

                                echo '<br />';
                                echo ' <div class="alert alert-success text-center" role="alert">
                                        Account created succesfully.
                                        </div>';
                            } else {
                                foreach($errors as $error) {
                                    echo '<br />';
                                    echo '<div class="alert alert-danger text-center" role="alert">';
                                    echo $error;
                                    echo '</div>';
                                }
                            }

                        }


                    ?>
我得到以下错误:

 Fatal error: Uncaught PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.accounts' doesn't exist 

但是该表存在于我的数据库中。这太奇怪了。

从我看来,这句话是错的

 $query = $conn->prepare("INSERT INTO accounts (name,password,email) VALUES ($username,$password,$email)");
应该是

 $query = $conn->prepare("INSERT INTO accounts (name,password,email) VALUES (:username,:password,:email)");

我认为如果你在变量周围加上引号,它会起作用,但是你看起来想正确地阻止sql注入。

你使用和应该使用它应该没有关系,因为我没有在PHP脚本中添加值,所以它目前没有被使用。或者我错了?好的,但您总是使用id,所以您不会检索这些值。当您访问数据库时,请从帐户中选择*,其中name=:username您将无法检索任何内容,因为username为空。这是什么意思?我在标记中使用了“名称”。对不起,你是对的,我的错误。我用bindParam和现在都试过了。他们没有一个人在工作。不知道是什么引起的。当我尝试使用$query=$conn->prepare(“插入帐户(名称、密码、电子邮件)值(:用户名、密码、电子邮件)”时;一切都对我有用!!如果没有表帐户,代码不会给出任何消息,它也会给出空($errors),并显示成功创建的消息帐户。但由于表帐户不存在,因此未进行插入。您确定该表存在吗?@Alessandro如果您调用,它可能会为您提供有关查询中发生的任何事情的更多信息,例如
var_dump($conn->errorInfo())
 $query = $conn->prepare("INSERT INTO accounts (name,password,email) VALUES ($username,$password,$email)");
 $query = $conn->prepare("INSERT INTO accounts (name,password,email) VALUES (:username,:password,:email)");