我试图用PDO_DBLIB驱动程序和PHP更新存储在我的SQL数据库中的数据。要更新数据,我只需要将几个命名参数传递给存储过程,它就完成了,但是当我尝试使用下面的代码时,它没有给我任何错误,但在数据库中没有任何更新。我正在json响应track中记录语句executiong。这是我的代码:
$conn = new PDO("dblib:$dsn","$uname", "$pwd");
$sth = $conn->prepare("EXECUTE SP_Web_Contact_Update :Person_ID, :ContactType_Code_ID, :Contact_Info, :Contact_ClassID");
$sth->bindValue(':Person_ID', $syntonicID, PDO::PARAM_INT);
$sth->bindValue(':ContactType_Code_ID', $codeid, PDO::PARAM_STR );
$sth->bindValue(':Contact_Info', $contactinfo, PDO::PARAM_STR );
$truefalse = $sth->execute();
echo json_encode($trufalse);
上面的代码总是打印true
,它没有给我任何信息进一步排除故障。你能跟我一起帮忙吗?
如果你的$sth->execute()
调用返回true
,那么你的存储过程执行没有错误。您有四个占位符,但只有三个bindValue()
调用,这可能意味着您的存储过程使用第四个参数的默认值执行。这是数据库中缺少更新的一个可能原因。
作为一个选项,您可以尝试使用UPDATE
获取存储过程中受PDOStatement::rowCount()语句影响的行数。
您还可以考虑包含一些异常处理。尝试使用下一个基本方法(使用您的代码):
<?php
...
# PDO Connection
try {
$conn = new PDO("dblib:$dsn","$uname", "$pwd");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch( PDOException $e ) {
die( "Error connecting to SQL Server".$e->getMessage());
}
# Statement
try {
$result = 0;
$sth = $conn->prepare("EXECUTE :Result = SP_Web_Contact_Update :Person_ID, :ContactType_Code_ID, :Contact_Info, :Contact_ClassID");
$sth->bindParam(':Result', $result, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT, PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE);
$sth->bindParam(':Person_ID', $syntonicID, PDO::PARAM_INT);
$sth->bindParam(':ContactType_Code_ID', $codeid, PDO::PARAM_STR);
$sth->bindParam(':Contact_Info', $contactinfo, PDO::PARAM_STR);
#$sth->bindParam(':Contact_ClassID', $??????, PDO::PARAM_STR);
$truefalse = $sth->execute();
$rowcount = $sth->rowCount();
echo json_encode($result);
echo json_encode($trufalse);
echo json_encode($rowcount);
} catch( PDOException $e ) {
die("Error executing query: ".$e->getMessage() );
}
...
#
$sth = null;
$conn = null;
?>