gpt4 book ai didi

php - 如何检查 JSON 格式的 PDO 中的 sql 错误?

转载 作者:行者123 更新时间:2023-11-30 00:01:27 27 4
gpt4 key购买 nike

我正在使用 luracast ReSTLer 来制作 REST API。我正在尝试使用 post 方法更新用户。但是我的sql没有执行,我不知道如何查找json格式的sql错误。

我的API代码是

<?php
class User
{
public $dp;

function __construct()
{
$this->dp = new DB_PDO_MySQL();
}
function post($request_data = NULL)
{

$response = array();
if(array_key_exists('user_id', $request_data)){
$response = $this->dp->updateUser($request_data);
}else{

$response = $this->dp->signUp($request_data);
}
return $response;

}

}

MySQL中的updateUser函数如下

function updateUser($postData){

$response = "";
$data = array();
if($this->checkToken($postData['token'])){
$sql = $this->db->prepare('SELECT * FROM phpclassifieds_acc_users WHERE username = :username');
$sql->execute(array(':username' => $postData['username']));
if($sql->rowCount()>0)
{
return $this->response(0,'','The Username ('.$postData[username].') is already in use');
}

$sql = $this->db->prepare('SELECT * FROM phpclassifieds_acc_users WHERE email = :email');
$sql->execute(array(':email' => $postData['email']));
if($sql->rowCount()>0)
{
return $this->response(0,'','The Email Address ('.$postData[email].') is already in use');

}
$sql = "UPDATE phpclassifieds_acc_users SET
type = :type,
username = :username,
password = :password,
name = :name,
address =:address,
address2 =:address2,
address_city = :address_city,
city =:city,
zipcode =:zipcode,
state =:state,
email =:email,
newsletter =:newsletter
WHERE user_id = :user_id";



try{



$stmt =$this->db->prepare($sql);
$stmt->bindParam(':type',$postData['type'],PDO::PARAM_STR);
$stmt->bindParam(':username',$postData['username'],PDO::PARAM_STR);
$stmt->bindParam(':password',$postData['password'],PDO::PARAM_STR);
$stmt->bindParam(':name',$postData['name'],PDO::PARAM_STR);
$stmt->bindParam(':address',$postData['address'],PDO::PARAM_STR);
$stmt->bindParam(':address2',$postData['address2'],PDO::PARAM_STR);
$stmt->bindParam(':address_city',$postData['address_city'],PDO::PARAM_STR);
$stmt->bindParam(':city',$postData['city'],PDO::PARAM_STR);
$stmt->bindParam(':zipcode',$postData['zipcode'],PDO::PARAM_STR);
$stmt->bindParam(':state',$postData['state'],PDO::PARAM_STR);
$stmt->bindParam(':email',$postData['email'],PDO::PARAM_STR);
$stmt->bindParam(':user_id',$postData['user_id'],PDO::PARAM_INT);
$var = $stmt->execute();
}
catch(PDOException $e) {
$err[] = var_dump($e->getMessage());

echo json_encode($err);


}

if($var){

$response = "Update Successfully done..";
$sqlSelect = $this->db->prepare('SELECT * FROM phpclassifieds_acc_users WHERE user_id = :user_id');
$sqlSelect->execute(array(':user_id'=>$postData['user_id']));
$data = $this->id2int($sqlSelect->fetch());
}else{
$response = "Update is unsuccessful ..";
}
return $this->response(1,$data,$response);
}
}

问题是,当我不使用 try catch 时,输出是“更新失败......”,而当我使用 try catch 时,我得到“意外的 token ”。

最佳答案

这行代码很奇怪

$err[] = var_dump($e->getMessage());
echo json_encode($err);

将 var_dump 编码为 json 很奇怪,你应该能够这样做:

$err[] = $e->getMessage();
echo json_encode($err);

或者您可以从errorInfo()获取错误

echo json_encode($this->db->errorInfo());
<小时/>

不要忘记绑定(bind)新闻通讯参数:

$stmt->bindParam(':newsletter',$postData['newsletter'],PDO::PARAM_STR);

关于php - 如何检查 JSON 格式的 PDO 中的 sql 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25000461/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com