2015-06-27 54 views
0

我是PDO的新手,我遇到以下插入操作的问题。它总是在其他情况下返回(返回0)。PHP PDO插入操作失败

function insertInclusao($usuarioId, $tipoFaturaId, $parametrosValidadores, $identificadorExtra, $optin) { 
    $pdoConnection = new PDO("mysql:host=host;dbname=dbname", "user", "pass"); 
    try { 
     $stmte = $pdoConnection->prepare("INSERT INTO SF_INCLUSAO (UsuarioId, TipoFaturaId, ParametrosValidadores, DataInclusao, IdentificadorExtra, Optin) VALUES (?, ?, ?, NOW(), ?, ?)"); 
     $stmte->bindParam(1, $usuarioId , PDO::PARAM_INT); 
     $stmte->bindParam(2, $tipoFaturaId , PDO::PARAM_INT); 
     $stmte->bindParam(3, $parametrosValidadores , PDO::PARAM_STR); 
     $stmte->bindParam(4, $identificadorExtra , PDO::PARAM_STR); 
     $stmte->bindParam(5, $optin , PDO::PARAM_INT); 
     $executarInclusao = $stmte->execute(); 
     if($executarInclusao) { 
      return $pdoConnection->lastInsertId(); 
     } else { 
      return 0; 
     } 
    } catch (PDOException $e) { 
     return -1; 
    } 
} 

它曾经当我使用的mysql_query像这样的工作:

function insertInclusao($usuarioId, $tipoFaturaId, $parametrosValidadores, $identificadorExtra, $optin) { 
    $db_connection = mysql_connect("host", "user", "pass") or die(mysql_error()); 
    mysql_select_db("database") or die(mysql_error()); 
    $insert_query = "INSERT INTO SF_INCLUSAO (UsuarioId, TipoFaturaId, ParametrosValidadores, DataInclusao, IdentificadorExtra, Optin) VALUES ('".$usuarioId."', '".$tipoFaturaId."', '".$parametrosValidadores."', NOW(), '".$identificadorExtra."', '".$optin."');"; 
    $query_return = mysql_query($insert_query); 
    $new_id = mysql_insert_id(); 
    if($query_return) { 
     return $new_id; // OK 
    } 
    else { 
     return 0; 
    } 
} 

现在我没有看到有什么可能是错误的。有什么建议么?

+0

change'catch(PDOException $ e){$ e-> getMessage(); }'并检查确切的错误消息。 –

+0

不到那里,它落入其他情况,返回0. –

+0

写'else {print_r($ pdoConnection-> errorInfo());}'并检查 –

回答

1

你需要设置这个

$pdoConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$pdoConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

,因为你已经设置的PDO的错误模式的异常现在,您将得到错误。

function insertInclusao($usuarioId, $tipoFaturaId, $parametrosValidadores, $identificadorExtra, $optin) { 
$pdoConnection = new PDO("mysql:host=host;dbname=dbname", "user", "pass"); 
$pdoConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$pdoConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
try { 
    $stmte = $pdoConnection->prepare("INSERT INTO SF_INCLUSAO (UsuarioId, TipoFaturaId, ParametrosValidadores, DataInclusao, IdentificadorExtra, Optin) VALUES (?, ?, ?, NOW(), ?, ?)"); 
    $stmte->bindParam(1, $usuarioId , PDO::PARAM_INT); 
    $stmte->bindParam(2, $tipoFaturaId , PDO::PARAM_INT); 
    $stmte->bindParam(3, $parametrosValidadores , PDO::PARAM_STR); 
    $stmte->bindParam(4, $identificadorExtra , PDO::PARAM_STR); 
    $stmte->bindParam(5, $optin , PDO::PARAM_INT); 
    $executarInclusao = $stmte->execute(); 
    if($executarInclusao) { 
     return $pdoConnection->lastInsertId(); 
    } else { 
     return 0; 
    } 
} catch (PDOException $e) { 
    return $e->getMessage(); 
} 
} 
+0

这两行帮助找到问题。它是与数据库结构不匹配的插入值之一。 –

1

使用此

$pdoConnection = new PDO("mysql:host=host;dbname=dbname", "user", "pass",array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

,然后你可以改变这一点:

if($executarInclusao) { 
    return $pdoConnection->lastInsertId(); 
} else { 
    return 0; 
} 

此:

return $pdoConnection->lastInsertId(); 

因为如果事情出差错QUER y,$stmte->execute() throw PDOException