完整性约束违规:1048列“名称”不能为空

I'm making a REST API to register a user using PHP and Slim framework. It's giving me an error when I run it in advanced REST client:

{"error":{"text":SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null}}

The code for the register module is as follows:

function insertUpdate() {
    $request = \Slim\Slim::getInstance()->request();
    $update = json_decode($request->getBody());
    $sql = "INSERT INTO users (name,email,password,phoneNumber,imageUrl,created_at) VALUES (:name, :email, :password, :phoneNumber, :imageUrl, :created_at)";
    try {
        $db = getDB();
        $stmt = $db->prepare($sql);  
        $stmt->bindParam("name", $update->name);
        $stmt->bindParam("email", $update->email);
        $stmt->bindParam("password",$update->password);
        $stmt->bindParam("phoneNumber",$update->phoneNumber);
        $stmt->bindParam("imageUrl",$update->imageUrl);
        $time=time();
        $stmt->bindParam("created_at", $time);

        $stmt->execute();
        echo "Register successfull";
    } catch(PDOException $e) {
        //error_log($e->getMessage(), 3, '/var/tmp/php.log');
        echo '{"error":{"text":'. $e->getMessage() .'}}'; 
    }
}

Stack Trace:

#0 /Applications/XAMPP/xamppfiles/htdocs/api/v1/index.php(71): Slim\Slim::handleErrors(8, 'Trying to get p...', '/Applications/X...', 71, Array)
#1 [internal function]: insertUpdate()
#2 /Applications/XAMPP/xamppfiles/htdocs/api/v1/Slim/Route.php(462): call_user_func_array('insertUpdate', Array)
#3 /Applications/XAMPP/xamppfiles/htdocs/api/v1/Slim/Slim.php(1326): Slim\Route->dispatch()
#4 /Applications/XAMPP/xamppfiles/htdocs/api/v1/Slim/Middleware/Flash.php(85): Slim\Slim->call()
#5 /Applications/XAMPP/xamppfiles/htdocs/api/v1/Slim/Middleware/MethodOverride.php(92): Slim\Middleware\Flash->call()
#6 /Applications/XAMPP/xamppfiles/htdocs/api/v1/Slim/Middleware/PrettyExceptions.php(67): Slim\Middleware\MethodOverride->call()
#7 /Applications/XAMPP/xamppfiles/htdocs/api/v1/Slim/Slim.php(1271): Slim\Middleware\PrettyExceptions->call()
#8 /Applications/XAMPP/xamppfiles/htdocs/api/v1/index.php(14): Slim\Slim->run()
#9 {main}

How to resolve this error?

doubu1853
doubu1853 我正在打印$request->getBody()并给出它的值,但是当我添加一般异常时,catch块会给出错误:{“error”:{“text”:收到的数据无效}}
大约 5 年之前 回复
drvpvmz16241016
drvpvmz16241016 根据文档:“如果json无法解码或编码数据深于递归限制,则返回NULL”。您将需要深入了解$request->getBody()存储的内容。
大约 5 年之前 回复
duanlvxi8652
duanlvxi8652 它给出null然后它说同样的错误:内部服务器错误
大约 5 年之前 回复
douqu2481
douqu2481 如果它正在工作,var_dump($update)的输出是什么?然后?
大约 5 年之前 回复
dtt5830659
dtt5830659 它给同样的错误抱歉给您带来不便。
大约 5 年之前 回复
douqiao2008
douqiao2008 好吧,它的工作我写的网址错了。谢谢您的帮助
大约 5 年之前 回复
douzhouhan4618
douzhouhan4618 这是无关紧要的。在确定函数json_decode()的返回值后,你确定你已经添加了这一行吗?
大约 5 年之前 回复
duanliexi1052
duanliexi1052 添加它之后,它会给出404Pagenotfound错误
大约 5 年之前 回复
douan3414
douan3414 做var_dump($upate);然后。似乎$update不是一个对象。
大约 5 年之前 回复
dsc862009
dsc862009 我已经用堆栈跟踪更新了问题,并且错误是在我使用$update->name的bindParam的行中
大约 5 年之前 回复
dropbox1111
dropbox1111 检查日志以查看错误所在的行和堆栈跟踪。
大约 5 年之前 回复
douwudie8060
douwudie8060 我正在尝试打印$update->name但它给我内部服务器错误
大约 5 年之前 回复
duanhui3759
duanhui3759 $update->name为空或空白。如果真的有价值,试着回应它。
大约 5 年之前 回复

1个回答

function insertUpdate() {
        $request = \Slim\Slim::getInstance()->request();
        parse_str($request->getBody(),$update); 
        $sql = "INSERT INTO users (name,email,password,phoneNumber,imageUrl,created_at) VALUES (:name, :email, :password, :phoneNumber, :imageUrl, :created_at)";
        try {
            //Validate your filed before insert in db
            if(!is_array($update) || (!$update)) {
                throw new Exception('Invalid data received');   
            }
            // put your require filed list here
            if((!$update['name']) || (!$update['email']) || (!$update['password'])){
                throw new Exception('Missing values for require fields');
            }
            $db = getDB();
            $stmt = $db->prepare($sql);  
            $stmt->bindParam("name", $update['name']);
            $stmt->bindParam("email", $update['email']);
            $stmt->bindParam("password",$update['password']);
            $stmt->bindParam("phoneNumber",$update['phoneNumber']);
            $stmt->bindParam("imageUrl",$update['imageUrl']);
            $time=time();
            $stmt->bindParam("created_at", $time);

            $stmt->execute();
            echo "Register successfull";
        } catch(PDOException $e) {
            //error_log($e->getMessage(), 3, '/var/tmp/php.log');
            echo '{"error":{"text":'. $e->getMessage() .'}}'; 
        }catch(Exception $e) {
            //error_log($e->getMessage(), 3, '/var/tmp/php.log');
            echo '{"error":{"text":'. $e->getMessage() .'}}'; 
        }
    }

Updated code as per request recieved

doudieyou5209
doudieyou5209 请接受这个作为ans和upvote
大约 5 年之前 回复
dourao3960
dourao3960 是的,谢谢你的帮助.. :)
大约 5 年之前 回复
dongqie2355
dongqie2355 我认为这个解决方案应该有效。
大约 5 年之前 回复
drwghu6386
drwghu6386 我有更新的代码请检查
大约 5 年之前 回复
duanla4959
duanla4959 我更改它,它给我输出如name = pulkit&email = adfkjn&password = dmsd&phoneNumber = kdf&imageUrl = asdnf&created_at = akfnarray(6){[“name”] => string(6)“pulkit”[“email”] => string(6) )“adfkjn”[“password”] => string(4)“dmsd”[“phoneNumber”] => string(3)“kdf”[“imageUrl”] => string(5)“asdnf”[“created_at” ] => string(4)“akfn”} {“error”:{“text”:试图获取非对象的属性}}
大约 5 年之前 回复
doutan1857
doutan1857 试试这个parse_str($ request-> getBody(),$ data); 后续代码var_dump($数据)
大约 5 年之前 回复
douxuexiao1748
douxuexiao1748 如何解决此错误和数据打印如下:name = pulkit&email = adfkjn&password = dmsd&phoneNumber = kdf&imageUrl = asdnf&created_at = akfn
大约 5 年之前 回复
dongziya9863
dongziya9863 你的$ update不是对象而你试图从中获取属性就是问题
大约 5 年之前 回复
doujun7161
doujun7161 以哪种格式?
大约 5 年之前 回复
dongliang_bj2016
dongliang_bj2016 它给出错误:{“error”:{“text”:收到的数据无效}}并在我回应$ request-> getBody()之后请求; 它给出了我输入的数据
大约 5 年之前 回复
dongshi3061
dongshi3061 注释掉var_dump($ update); 死; 并再次检查我已更新代码以捕获一般异常
大约 5 年之前 回复
dqc22586
dqc22586 它给了我同样的错误,我正在使用高级休息客户端来检查api
大约 5 年之前 回复
dtfpznrbn503027700
dtfpznrbn503027700 检查你的$ request-> getBody()以及你如何调用API?
大约 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐