Проблема, которую я только что получил,
$update_stmt->execute()
в порядке, а данные в базе данных уже обновляются
но, $update_resultrow = $update_stmt->num_rows;
return 0?
Я попытался скопировать команду MySQL для запуска в запросе, и она также хорошо работала:
UPDATE ACCOUNT_EMPLOYEE SET NAME = 'cccccc' WHERE ID = 1
Код проблемы здесь:
$update_sql = "UPDATE ACCOUNT_EMPLOYEE SET NAME = ? WHERE ID = ?"; if ($update_stmt = $conn -> prepare($update_sql)) { if ($update_stmt->bind_param("si", $newname, $acc_id ) ) { if ($update_stmt->execute()) { // must declare here to be able to get num_rows $update_stmt->store_result(); $update_resultrow = $update_stmt->num_rows; if ($update_resultrow == 0) { echo $error_forgot_noresult . '????' . $acc_id ; $update_stmt->close(); $conn->close(); exit(); } } } }
Да, Фред -ii-, я никогда не замечал, что у него есть -> affected_rows. пожалуйста, напишите как ответ, и я отметю его здесь
По запросу OP.
Увидев, что цель здесь – проверить, действительно ли запрос действительно успешный, вам нужно использовать affected_rows
.
Согласно руководству http://php.net/manual/en/mysqli.affected-rows.php
printf («Затронутые строки (UPDATE):% d \ n", $ mysqli-> affected_rows);
int $ mysqli-> affected_rows;
Примечание:
С помощью
$update_resultrow = $update_stmt->num_rows;
и проверка ошибок, вызвала бы ошибку, а не «return 0».
Попробуйте найти количество строк, затронутых вашим запросом, вместо того, чтобы найти количество строк, как показано ниже:
$update_sql = "UPDATE ACCOUNT_EMPLOYEE SET NAME = ? WHERE ID = ?"; if ($update_stmt = $conn -> prepare($update_sql)) { if ($update_stmt->bind_param("si", $newname, $acc_id ) ) { if ($update_stmt->execute()) { // must declare here to be able to get num_rows $update_stmt->store_result(); $update_resultrow = $update_stmt->affected_rows; if ($update_resultrow == 0) { echo $error_forgot_noresult . '????' . $acc_id ; $update_stmt->close(); $conn->close(); exit(); } } } }