2014-08-28 97 views
1

這很奇怪。我有以下php代碼,當我執行它時,affected_rows返回-1,但是當我在HeidiSQL中運行select時,數據在表中。爲什麼會發生?Affected_rows返回負值-1,但插入

$id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT); 
$estatus = filter_input(INPUT_POST, 'estatus'); 
$larga = filter_input(INPUT_POST, 'larga'); 
$corta = filter_input(INPUT_POST, 'corta'); 
$fecha = filter_input(INPUT_POST, 'fecha'); 
$usuario = $_SESSION['id']; 
$query = 'INSERT INTO tarea(oportunidad_id, estatus, usuarioId, tareaTarea, fechaLimite, tareaCorta)' 
     . 'VALUES(' . $id . ', "' . utf8_decode($estatus) . '", ' . $usuario . ', "' . $larga . '", "' . $fecha . 
    '", "' . $corta . '")'; 
$con->query($query) or exit("Error: " . $con->errno . ": " . $con->error); 
if ($con->affected_rows > 0) { 
    echo 'Tarea agregada'; 
} else { 
    exit($con->mensaje_error()); 
} 
+1

'如果成功則返回受影響的行數,和-1,如果最近一次查詢失敗。 ' – 2014-08-28 17:29:03

+0

Emmm我知道,但似乎查詢確實不會失敗,因爲數據被插入到表中。 – iglesiasedd 2014-08-28 17:30:26

+0

使用'mysqli'時,您應該使用參數化查詢和['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)將用戶數據添加到您的查詢中。 **不要**使用字符串連接來實現此目的,因爲您將創建嚴重的[SQL注入漏洞](http://bobby-tables.com/)。我嚴重懷疑'filter_input'是否足夠。 – tadman 2014-08-28 18:01:33

回答

0
if ($result = $con->query($query)){ 
    if($result->num_rows > 0){ 
     echo 'Tarea agregada'; 
    } 
} else { 
    exit($con->mensaje_error()); 
} 

嘗試使用NUM_ROWS,而不是受影響的行。你可以在這個if語句裏面做$ result = $ con> query,它的功能與$con->query($query) or exit(...

一樣,一個變量,並在該結果上做->affected_rows

查詢不是失敗,您檢查查詢的方式是失敗

+0

這是一種方式,但是當我應該使用'affected_rows'? – iglesiasedd 2014-08-28 17:36:48

+0

affected_rows用於INSERT,UPDATE,REPLACE和DELETE。 num_rows用於SELECT。 – 2014-08-28 18:52:02

+1

這就是要點。我想使用affected_rows來驗證INSERT是否正確。 – iglesiasedd 2014-08-28 18:55:21