主键错误(自动增加int)在php中调用存储过程

问题描述 投票:0回答:3

// STORED PROCEDURE NAME:insertName,_id是一个自动增量

try { 

        $sql = "CALL insertName(:_id, :_name)";
        $res = $pdo->prepare($sql);
        $res -> bindValue(":_id","NULL");
        $res -> bindValue(":_name",$name);
        $res->execute(); 
        $res->setFetchMode(PDO::FETCH_ASSOC);
} catch( PDOException $e ) {

        die( "ERROR ..." .$e->getMessage());
}

//如果我尝试直接插入一个号码就行了

try {  
        $sql = "CALL insertName(:_id, :_name)";

        $res = $pdo->prepare($sql);
        $res -> bindValue(":_id",1);
        $res -> bindValue(":_name",$name);
        $res->execute(); 
        $res->setFetchMode(PDO::FETCH_ASSOC);
} catch( PDOException $e ) {

        die( "ERROR ..." .$e->getMessage());
}

//即使我在不​​使用存储过程的情况下尝试此操作也行

try {  
        $sql = 'INSERT INTO (id,name) VALUES (NULL,"'.$name.'" )';
        $res = $pdo->prepare($sql);
        $res->execute(); 
} catch( PDOException $e ) {

        die( "ERROR ..." .$e->getMessage());
}
php mysql sql pdo
3个回答
0
投票

仅插入名称值,因为id是自动增量,它将自己获取值


0
投票

您应该使用NULL将变量设置为字符串,然后将其传递给bindValue

try { 
        $id = "NULL"
        $sql = "CALL insertName(:_id, :_name)";
        $res = $pdo->prepare($sql);
        $res -> bindValue(":_id", $id);

而且你必须确保,你可以将NULL保存为该列的值!


0
投票
//I changed the stored procedure

开始交易;

DELIMITER |

CREATE PROCEDURE insertName(_name)

BEGIN

//operations

INSERT INTO TABLE VALUES (NULL,_name);

结束;

| DELIMITER;

承诺;

//and then i call insertName(_name)
© www.soinside.com 2019 - 2024. All rights reserved.