pdo parameter is not binding

2019-08-02 14:07发布

问题:

I am trying to bind a param to my query, it is not binding some parameters.

Posted array is

Array
(
    [action] => add_category
    [fk_user_account_type_id] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 5
            [3] => 6
            [4] => 7
            [5] => 8
            [6] => 9
        )

    [cat_name] => Special Deals
    [parent_cat] => 0
    [cat_status] => Active
    [page_content] => 

this is test
)

$cat_name = $postArray['cat_name'];
$cat_status = $postArray['cat_status'];
$parent_id = $postArray['parent_cat'];
$cat_description    =   $postArray['page_content'];

$sql = "INSERT INTO tbl_category SET `category_title` = :cat_name  , `category_alias` = :category_alias , `category_status`= :cat_status, `category_parent_id` = :parent_id, "
                . "category_description =   :cat_description";
        $statement = $this->db->conn_id->prepare($sql);
        $statement->bindParam(':cat_name', $cat_name, PDO::PARAM_STR);
        $statement->bindParam(':cat_status', $cat_status, PDO::PARAM_STR);
        $statement->bindParam(':category_alias', $category_alias, PDO::PARAM_STR);
        $statement->bindParam(':parent_id', $parent_id, PDO::PARAM_INT);
        $statement->bindParam(':cat_description',$cat_description, PDO::PARAM_STR);

and when i do

 echo $this->parms($sql,$postArray); exit // for debugging;

it shows me the query like

INSERT INTO tbl_category SET `category_title` = 'Special Deals'  , `category_alias` = 'special_deals' , `category_status`= 'Active', `category_parent_id` = :parent_id, category_description =   :cat_description

回答1:

BindParam passes by reference so it needs a value and you have none,replace it with bindValue.

$statement->bindValue(':cat_name', $cat_name, PDO::PARAM_STR);
    $statement->bindValue(':cat_status', $cat_status, PDO::PARAM_STR);
    $statement->bindValue(':category_alias', $category_alias, PDO::PARAM_STR);
    $statement->bindValue(':parent_id', $parent_id, PDO::PARAM_INT);
    $statement->bindValue(':cat_description',$cat_description, PDO::PARAM_STR);