2013-05-07 2 views
0

Я пытаюсь вызвать функцию для обновления mysqli db и отчитываться, если произошла ошибка. У меня есть это в моем тестовом файле до сих пор:Отчет об ошибках в MYSQLi для неизвестного индекса

<?php 

$success = test("cat",17); 
echo $success; 
echo "<br />"; 


function test($name, $number){ 
    $db = new mysqli("localhost","root","","test"); 
    if($db->connect_errno){ 
     return "Failed to connect to MYSQL Database: [" . $db->connect_errorno . "]" . $db->connect_error; 
    } 
    if(!($stmt = $db->prepare("UPDATE `test` SET `name` = ? WHERE `number` = ?"))){ 
     return "prepare failed: [" . $db->errno . "]" . $db->error; 
    } 
    if(!($stmt->bind_param('si', $name, $number))){ 
     return "bind failed: [" . $db->errno . "]" . $db->error; 
    } 
    if(!($stmt->execute())){ 
     return "execute failed: [" . $db->errno . "]" . $db->error; 
    } 
    $stmt->close(); 
    return "Successfully updated database!"; 
} 

?> 

и с тестом у меня есть (кошка, 17) он возвращает успех, даже если нет столбца с номером 17, и я не вижу ничего изменение в базе данных. Как я могу заставить его правильно вернуть сбой, если он не может найти номер в предложении WHERE?

+0

запрос, который не изменяет никаких записей, или не возвращает ни одной строки, это ** НЕ ** «провал» , это просто пустой набор результатов. –

ответ

2

После execute() Завершает убедитесь, что $stmt->affected_rows больше нуля:

if(!($stmt->execute())){ 
    return "execute failed: [" . $db->errno . "]" . $db->error; 
} 

if(!$stmt->affected_rows) { 
    return "no rows updated"; 
} 
+0

Это сработало отлично! благодаря! – user2359302

Смежные вопросы