我正在尝试使用PDO_DBLIB驱动程序和php更新存储在SQL数据库中的数据。要更新数据,我只需要向存储过程传递几个命名参数即可完成此操作,但是当我尝试使用以下代码时,它没有任何错误,但是数据库中没有任何更新。我在json响应中记录语句executeg以进行跟踪。 这是我的代码:
$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
,这没有任何信息可做进一步的故障排除。你们可以帮我吗?
答案 0 :(得分:0)
如果您的$sth->execute()
调用返回true
,则您的存储过程将正确执行。
您有四个占位符,但是只有三个bindValue()
调用,这可能意味着您的存储过程是使用第四个参数的默认值执行的。
这是数据库中缺少更新的可能原因之一。
作为一种选择,您可以尝试使用PDOStatement::rowCount()来获取存储过程中受UPDATE
语句影响的行数
您还可以考虑包括一些异常处理。尝试使用下一种基本方法(使用您的代码):
<?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;
?>