Ошибка 1366 при вызове хранимой процедуры (php mysql) - PullRequest
0 голосов
/ 04 июня 2018

Я пишу сценарий, позволяющий пользователям моего сайта изменять основную информацию, хранящуюся в БД.

Я написал для него хранимую процедуру и хочу вызвать ее с помощью php-скрипта.Когда я это сделал, я получил эту ошибку:

Неустранимая ошибка: Uncaught PDOException: SQLSTATE [HY000]: Общая ошибка: 1366 Неверное целочисленное значение: «Доменико» для столбца «Cod_Utente» в строке 1 в C: \ inetpub \ Portale \ php \ update_user.php: 37 Трассировка стека: # 0 C: \ inetpub \ Portale \ php \ update_user.php (37): PDOStatement-> execute () # 1 {main}, брошенный в C: \inetpub \ Portale_ETS \ php \ update_user.php в строке 37

Cod_Utente - это первичный ключ таблицы, целое число, автоинкремент.Можете ли вы помочь мне найти проблему, пожалуйста?Вот код:

CREATE DEFINER=`root`@`localhost` PROCEDURE `update_user`(
IN v_Nome_UT VARCHAR(25),
IN v_Cog_UT VARCHAR(25),
IN v_Data_Iscrizione VARCHAR(45), 
IN v_Mail_UT VARCHAR(45),
IN v_Tel_UT VARCHAR(45),
IN Cod_Utente int

 )
BEGIN


update tab01_utenti
set 

Nome_UT=v_Nome_UT,
Cog_UT=v_Cog_UT,
Data_Iscrizione=v_Data_Iscrizione,
Mail_UT=v_Mail_UT,
Tel_UT=v_Tel_UT

where 
Cod_Utente=v_Cod_Utente;


commit;

END

Сценарий Php (соединение с БД опущено, но нормально):

$a = $_POST["nome"];
$b = $_POST["cognome"];
$c = $_POST["mail"];
$d = $_POST["data"];     
$e = $_POST["tel"];
$f = $_SESSION['Cod_Utente'];



// execute the stored procedure
$sql  = "CALL update_user(:v_Nome_UT, :v_Cog_UT, :v_Mail_UT, 
                          :v_Data_Iscrizione, :v_Tel_UT, :v_Cod_Utente)";
$stmt = $conn->prepare($sql);

$stmt->bindParam(':v_Nome_UT', $a, PDO::PARAM_STR);
$stmt->bindParam(':v_Cog_UT', $b, PDO::PARAM_STR);  
$stmt->bindParam(':v_Data_Iscrizione', $d, PDO::PARAM_STR);
$stmt->bindParam(':v_Mail_UT', $c, PDO::PARAM_STR);
$stmt->bindParam(':v_Tel_UT', $e, PDO::PARAM_STR);
$stmt->bindParam(':v_Cod_Utente', $f, PDO::PARAM_INT);
$stmt->execute();

1 Ответ

0 голосов
/ 07 июня 2018

Вы сохраняете строковое значение в $_SESSION['Cod_Utente'], прежде чем передавать его в хранимую процедуру, убедитесь, что оно является допустимым целым числом.

$f = $_SESSION['Cod_Utente'];

В сообщении об ошибке указано, что вместо текста 'Domenico'целочисленное значение.

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