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

标签 php mysql json api pdo

我正在使用 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/

相关文章:

python - 等待收到有效的 JSON 响应 - Python

PHP 不保存到文件

php - 从mysql的表中读取文件类型php的内容

php - 构建计算机代数系统

php - 我怎么知道在我的 select sql 中查询了哪些表?

mysql - 在 MySQL 中加速跨多个字段的 LIKE %foo% 搜索的方法

json - 如何从多个 JSON 文件中删除重复项?

javascript - 删除后刷新 JSON

php - 如何使 symfony 表单支持 datetime-local 输入类型?

php - php如何获取某一列的所有值