У меня есть функция ниже для подготовки и выполнения и возврата результата. я вызываю его, чтобы подготовить мой запрос вставки и привязать к нему значение и вернуть выполненный результат. но когда я проверяю количество затронутых строк вне области действия функции, это дает мне -1, однако моя ожидаемая запись вставляется в мою таблицу.
function prepare_and_run($link,$query_structure){
$stmt = mysqli_prepare($link,$query_structure);
mysqli_stmt_bind_param($stmt, 's', 'a string value');
mysqli_stmt_execute($stmt);
$result=mysqli_stmt_get_result($stmt);
if($result===false && !mysqli_errno($link))
return true;
return $result;
}
//call the function above
$link=mysqli_connect(...);
$result=prepare_and_run($link,"insert into table values(?)");
echo mysqli_affected_rows($link); // output: -1 !!!
Я добавил 3 строки в код и увидел, что это исправлено:
$dpq_stmt=null; // it is added
function prepare_and_run($link,$query_structure){
$stmt = mysqli_prepare($link,$query_structure);
mysqli_stmt_bind_param($stmt, 's', 'a string value');
mysqli_stmt_execute($stmt);
global $dpq_stmt; // it is added
$dpq_stmt=$stmt; // it is added
$result=mysqli_stmt_get_result($stmt);
if($result===false && !mysqli_errno($link))
return true;
return $result;
}
//call the function above
$link=mysqli_connect(...);
$result=prepare_and_run($link,"insert into ...");
echo mysqli_affected_rows($link); // output: 1 . it is correct
а почему? Должны ли мы всегда определять подготовленную переменную оператора в global?