Ошибка с первичным ключом (автоинкремент int) вызов хранимой процедуры в php - PullRequest
0 голосов
/ 09 марта 2019

// ИМЯ ХРАНИЛИЩЕ ПРОЦЕДУРЫ: 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());
}

Ответы [ 3 ]

0 голосов
/ 09 марта 2019

Вы должны установить переменную с NULL в качестве строки, а затем передать ее bindValue:

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

И вы должны быть уверены, что можете сохранить NULL в качестве значения для этого столбца!

0 голосов
/ 09 марта 2019
//I changed the stored procedure

начать транзакцию;

РАЗДЕЛИТЕЛЬ |

СОЗДАТЬ ПРОЦЕДУРУ insertName (_name)

BEGIN

//operations

INSERT INTO TABLE VALUES (NULL,_name);

END;

| РАЗДЕЛИТЕЛЬ;

совершить;

//and then i call insertName(_name)
0 голосов
/ 09 марта 2019

вставьте только значение имени, так как идентификатор имеет автоинкремент, он будет принимать значения сам по себе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...