将 mysql 查询转换为准备好的语句
Turning mysql query into prepared statement
我正在尝试将以下查询转换为准备好的语句,但到目前为止我运气不好。我附上了我的一个尝试。这个想法是我用它来检查之后使用 mysqli_num_rows 返回了多少行。
$sql2=mysqli_query($bd, "SELECT address FROM member WHERE address='".$address."'");
这是我创建预准备语句的尝试。
$ustmt = $bd->prepare("SELECT username FROM member WHERE username = ?");
$ustmt->bind_param("s", $username);
$sql2 = $ustmt->execute();
这是正确的吗?如果是这样,我该如何检查返回 $sql2 的行数?
是的,你的准备和执行是正确的。
执行调用returns一个boolean
值,如果成功则为true
否则false
(如果false
,$stmt->error
属性 将设置错误信息。
这值得在继续之前检查,因为如果它为假,则不会有结果。
与准备工作相同,如果 $mysqli->prepare(...)
调用 returns false,则 $mysqli->error
将设置错误消息。
执行后,您可以通过 $num_rows
属性(如果是 SELECT
语句)或 $affected_rows
属性 在其他情况下。
echo $stmt->num_rows;
或者,您可以使用 get_result()
方法从语句中获取 mysqli_result
对象。
mysqli_result
对象包含 public 字段 $num_rows
,因此您可以通过以下方式检查行数:
$res = $stmt->get_result();
echo $res->num_rows;
对于 mysqli_result
对象中的其他方法,我建议检查 docs。
我正在尝试将以下查询转换为准备好的语句,但到目前为止我运气不好。我附上了我的一个尝试。这个想法是我用它来检查之后使用 mysqli_num_rows 返回了多少行。
$sql2=mysqli_query($bd, "SELECT address FROM member WHERE address='".$address."'");
这是我创建预准备语句的尝试。
$ustmt = $bd->prepare("SELECT username FROM member WHERE username = ?");
$ustmt->bind_param("s", $username);
$sql2 = $ustmt->execute();
这是正确的吗?如果是这样,我该如何检查返回 $sql2 的行数?
是的,你的准备和执行是正确的。
执行调用returns一个boolean
值,如果成功则为true
否则false
(如果false
,$stmt->error
属性 将设置错误信息。
这值得在继续之前检查,因为如果它为假,则不会有结果。
与准备工作相同,如果 $mysqli->prepare(...)
调用 returns false,则 $mysqli->error
将设置错误消息。
执行后,您可以通过 $num_rows
属性(如果是 SELECT
语句)或 $affected_rows
属性 在其他情况下。
echo $stmt->num_rows;
或者,您可以使用 get_result()
方法从语句中获取 mysqli_result
对象。
mysqli_result
对象包含 public 字段 $num_rows
,因此您可以通过以下方式检查行数:
$res = $stmt->get_result();
echo $res->num_rows;
对于 mysqli_result
对象中的其他方法,我建议检查 docs。