PHP -致命错误:未捕获的PDO异常:SQLSTATE[HY093]:无效的参数号[已关闭]

eblbsuwk  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(130)

已关闭此问题为not reproducible or was caused by typos。它目前不接受回答。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
2天前关闭。
Improve this question
我正在练习用PHP和mySQL连接react到数据库
我正在做一个教程视频,一切都很好,但后来当我试图执行我的代码,突然遇到了一个错误,无法解决它自己
我试图获取文本输入的值并将其保存在数据库中(如果我写得很糟糕,对不起,我不是以英语为母语的人)
下面是连接代码:

<?php 
    class DbConnect {
        private $server = 'localhost';
        private $dbname = 'react-crud-app';
        private $user = 'root';
        private $pass = '';

        public function connect() {
            try {
                $conn = new PDO('mysql:host=' .$this->server .';dbname=' . $this->dbname, $this->user, $this->pass);
                $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                return $conn;
            } catch (\Exception $e) {
                echo "Database Error: " . $e->getMessage();
            }
        }
    }
 ?>

下面是从输入中获取文本并将其放入数据库的索引代码:

<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: *");

include ('./DbConnect.php');
$objDb = new DbConnect;
$conn = $objDb->connect();

$method = $_SERVER['REQUEST_METHOD'];

switch($method){
    case "POST";
        $user = json_decode(file_get_contents('php://input'));
        $sql = "INSERT INTO users(id, name, email, mobile, created_at) VALUES(null ,:name, :email, :mobile, :created_at)";
        $stm = $conn->prepare($sql);
        $created_at = date('Y-M-D');
        $stm->bindParam(':name', $user->name);
        $stm->bindParam(':email', $user->email);
        $stm->bindParam(':mobile', $user->mobile);
        $stm->bindParam(':created_at', $created_at);

        if($stm->execute()){ //error shows itself right here if it helps
            $response = ['status'=> 1 , 'message'=>'successful'];
        }else{
            $response = ['status'=> 0 , 'message'=>'was NOT successful'];
        }
        echo json_encode($response);
        break;
    }

对不起,如果它不是一个真正好看的代码:(
我试图执行表项(名称,电子邮件...)作为一个数组,但有同样的错误再次。

xnifntxz

xnifntxz1#

分号(; switch语句中“POST”case后面的)应该是冒号(:),以正确定义case块。就像这样:

switch($method){
case "POST":

当使用bindParam绑定参数时,您应该将值作为引用传递。在代码中,直接传递值而不是引用。就像这样:

$stm->bindParam(':name', $user->name, PDO::PARAM_STR);

我看到的另一个可能的错误是,在SQL查询中,你有五个占位符,但是,你只绑定了四个参数,那么你也应该为:id占位符绑定一个值,因为你已经在SQL查询中包含了它。因为它被设置为null,你可以用null绑定它,如下所示:

$stm->bindParam(':id', null, PDO::PARAM_NULL);

如果您有不同的错误,请发布它,以便我们更好地调试它。

相关问题