【问题标题】:sql server update when WHERE exist当 WHERE 存在时 sql server 更新
【发布时间】:2014-07-14 06:41:08
【问题描述】:

我有 sql + php 查询,我需要在更新失败示例时通知用户:

$sql = "UPDATE db SET
date = GetDate(),
...
...
...

WHERE name = '$name1' and code = '$code' and value1 = '$value1' and value2='$value2' 
";
sqlsrv_query( $con, $sql);

现在如果 php 变量值不是 100% 匹配 db 更新中的值失败但用户看不到。他可以检查记录,然后再试一次。我想在查询没有更新时通知他。

【问题讨论】:

  • sqlsrv_query 之后尝试sqlsrv_rows_affected($con),如果返回0,则没有任何变化

标签: php sql sql-server sql-update


【解决方案1】:

就像 GOB 评论的那样,您可以使用 PHP sqlsrv_rows_affected 函数来检索受影响的行数。例如:

$stmt = sqlsrv_query( $conn, $sql , $params, $options );
$row_count = sqlsrv_rows_affected( $stmt );
if ($row_count === false)
   echo "Error in retrieving row count.";
else
   echo $row_count;

【讨论】:

    【解决方案2】:

    在直接执行更新查询之前,检查更新查询中的条件是否存在。这可以通过选择该条件的计数来完成。

    试试下面的代码:

    $sql = "select count(*) as count from db WHERE name = '$name1' and code = '$code' and value1 = '$value1' and value2='$value2' ";
    while($row = mysqli_fetch_array($sql))
    {
        $count = $row['count'];
    }
    
    if($count == 0)
    {
       echo 'update will fail';
    }
    else
    {
    $sql = "UPDATE db SET
    date = GetDate(),
    ...
    ...
    ...
    
    WHERE name = '$name1' and code = '$code' and value1 = '$value1' and value2='$value2' 
    ";
    }
    

    【讨论】:

    • 您的selectupdate 之间可能还有另一个查询。不过可能是可以接受的风险:)
    猜你喜欢
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    相关资源
    最近更新 更多