@@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。

比如下面的SQL 语句:

select EmployeeID from employees  -- 这条SQL 语句返回9条记录
print(@@error)
print(@@ROWCOUNT)

返回的结果是:

(9 row弯月 affected)

0
0


select EmployeeID from employees  -- 这条SQL 语句返回9条记录
print(@@ROWCOUNT)
print(@@error)
返回的结果是:

(9 row弯月 affected)

9
0

原因,后一个打印出来的是前一个print 执行后的对应变量的结果。

如果想在一个语句执行后,即获得 @@ROWCOUNT 也获得 @@error,需要用一个SQL 语句把它们读出来:
declare @a int ,@b int
select EmployeeID from employees  -- 这条SQL 语句返回9条记录
select @a = @@ROWCOUNT,@b = @@error
print(@a)
print(@b)

在这个一句读取数据中,先取那个都无所谓。也就是 select @b = @@error,@a = @@ROWCOUNT 也可以。但是必须是一句,如果变成两句,就又有上面的问题了。

declare @a int ,@b int
select EmployeeID from employees  -- 这条SQL 语句返回9条记录
select @b = @@error
select @a = @@ROWCOUNT
print(@a)
print(@b)

返回结果:
(9 row弯月 affected)

1
0

declare @a int ,@b int
select EmployeeID from employees  -- 这条SQL 语句返回9条记录
select @a = @@ROWCOUNT
select @b = @@error
print(@a)
print(@b)
返回结果:
(9 row弯月 affected)

9
0

今天的一个Bug 就跟这个有关,找了很久,才发现是这里的原因。 SQL 说明书中写得很清楚,就是没注意。

 获取行数可以使用@@CURSOR_ROWS ,就没有这个限制了
可以使用 PHP 中的 mysqli 扩展或 PDO 扩展来连接 MySQL 数据库并执行 SQL 语句。 使用 mysqli 扩展: ```php // 配置数据库连接信息 $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "database_name"; // 创建连接 $conn = mysqli_connect($servername, $username, $password, $dbname); // 检查连接是否成功 if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } // 执行 SQL 查询 $sql = "SELECT * FROM users"; $result = mysqli_query($conn, $sql); // 输出查询结果 if (mysqli_num_rows($result) > 0) { while($row = mysqli_fetch_assoc($result)) { echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>"; } } else { echo "0 results"; } // 关闭连接 mysqli_close($conn); ``` 使用 PDO 扩展: ```php // 配置数据库连接信息 $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "database_name"; // 创建连接 try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // 设置 PDO 错误模式为异常 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo "Connection failed: " . $e->getMessage(); } // 执行 SQL 查询 $sql = "SELECT * FROM users"; $result = $conn->query($sql); // 输出查询结果 if ($result->rowCount() > 0) { foreach($result as $row) { echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>"; } } else { echo "0 results"; } // 关闭连接 $conn = null; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值