https://www.php.net/manual/en/class.mysqli-stmt.php
mysqli_stmt 类
/* 增,删,改 错误返回-1 */
// $stmt->execute();
// $stmt->store_result();
// echo '共有'.$stmt->num_rows.'行<br >';//输出结果数
// echo '共影响'.$stmt->affected_rows.'行<br >';//输出影响行数---增,删,改,查(如果没有更改,影响行数为0),新增错误返回-1
/*查询 语句*/
$sql = "SELECT * FROM table WHERE Url=? and id=? ";
$stmt = $conn->stmt_init();
if(!$stmt->prepare($sql))
{
/*语句错误 */
print "Failed to prepare statement\n".'<br>';
var_dump($sql);
}
else
{
$stmt->bind_param("si", $continent,$id);
$continent='xxx';
$id=1;
$stmt->execute();
$result = $stmt->get_result();
echo $result->num_rows;//输出结果数
while ($row = $result->fetch_assoc())
{
// fetch_assoc 以一个关联数组方式抓取一行结果。
//fetch_all 抓取所有的结果行并且以关联数据,数值索引数组,或者两者皆有的方式返回结果集
// fetch_array 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果。
var_dump($row);
foreach ($row as $r)
{
//echo $r.'<br>';
}
}
}
/*新增 语句*/
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 预处理及绑定
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
// 设置参数并执行
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();
$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();
echo "新记录插入成功";
$conn= new Mysqli(DB_HOST,DB_USER,DB_PWD,DB_NAME);
if($conn->connect_errno){
die('Connect Error : '.$conn->connect_error);
}
$sql = "SELECT * FROM table WHERE id=? ";
$stmt = $conn->stmt_init();
if(!$stmt->prepare($sql))
{
/*语句错误 输出 $sql */
var_dump($sql);
}
else
{
$stmt->bind_param("i", $continent);
$continent_array = array(106);
/*如果 同个语句 不同的值 多次查询*/
foreach($continent_array as $continent)
{
$stmt->execute();
$result = $stmt->get_result();
echo $result->num_rows;//输出结果数
while ($row = $result->fetch_assoc())
{
// fetch_assoc 以一个关联数组方式抓取一行结果。
//fetch_all 抓取所有的结果行并且以关联数据,数值索引数组,或者两者皆有的方式返回结果集
// fetch_array 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果。
//echo $row['id'];
var_dump($row);
}
}
}
$conn= new Mysqli(DB_HOST,DB_USER,DB_PWD,DB_NAME);
if($conn->connect_errno){
die('Connect Error : '.$conn->connect_error);
}
$sql = "SELECT * FROM table ad_phone_login_info WHERE id=? ";
//$sql=" UPDATE `ad_phone_login_info` SET `pass_wrong_time_status` = ? WHERE `id` = 104 ";
/**/
$stmt = $conn->stmt_init();
if(!$stmt->prepare($sql))
{
/*语句错误 输出 $sql */
var_dump($sql);
}
else
{
$stmt->bind_param("i", $continent);
$continent_array = array(106);
/*如果 同个语句 不同的值 多次查询*/
foreach($continent_array as $continent)
{
// $stmt->execute();
// $stmt->store_result();
// echo '共有'.$stmt->num_rows.'行<br >';//输出结果数
// echo '共影响'.$stmt->affected_rows.'行<br >';//输出影响行数---增,删,改,查(如果没有更改,影响行数为0),新增错误返回-1
$stmt->execute();
$result = $stmt->get_result();
echo $result->num_rows;//输出结果数
while ($row = $result->fetch_assoc())
{
// fetch_assoc 以一个关联数组方式抓取一行结果。
//fetch_all 抓取所有的结果行并且以关联数据,数值索引数组,或者两者皆有的方式返回结果集
// fetch_array 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果。
//echo $row['id'];
var_dump($row);
foreach ($row as $r)
{
//echo $r.'<br>';
}
}
}
}
mysqli预处理的学习主要是指mysqli_stmt对象的方法的使用,下面我们通过一个例子来分析各个方法的使用方法和作用:
代码如下:
/* 连接mysql */
$mysqli = new Mysqli(DB_HOST,DB_USER,DB_PWD,DB_NAME);
if($mysqli->connect_errno){
die('Connect Error : '.$mysqli->connect_error);
}
/* 预处理sql */
$sql = "SELECT * FROM user WHERE id>=?";
/* 获取mysqli_statement对象*/
$stmt = $mysqli->prepare($sql);
/* 绑定参数 */
$stmt->bind_param('i',$id);//后面的变量 是 哪个?,多少个?,多少个变量,
/*
i - integer(整型)
d - double(双精度浮点型)
s - string(字符串)
b - BLOB(布尔值)
*/
/* 定义参数 */
$id = 6;
/* 执行上面的sql语句 */
if($stmt->execute()) {
/*
默认select的结果集保存在mysql服务器内存中,并且通过fetch
一条一条的返回给php,如果想在php中对该结果集进行操作,可以
使用下面的方法,该函数内部对mysqli_statement对象的部分属
性重置为真实的结果,例如num_rows,affected_rows等属性
*/
$stmt->store_result();
echo '共有'.$stmt->num_rows.'行<br >';//输出结果数
echo '共影响'.$stmt->affected_rows.'行<br >';//输出影响行数
/* 将结果集中的值付给对应的变量 */
$stmt->bind_result($id,$name,$password);
/* 移动结果集的内部指针到最后 */
$stmt->data_seek($stmt->num_rows-1);
/* 使用fetch一个个获取结果集中的内容 */
while($stmt->fetch()) {
echo '用户编号:',$id,'<br />';
echo '用户名:',$name,'<br />';
echo '用户密码:',$password,'<br />';
echo '<hr />';
}
/* 释放由store_result产生的结果集 */
$stmt->free_result();
/* 关闭mysqli_statement对象 */
$stmt->close();
}
/* close connection */
$mysqli->close();
分析:在上面的例子中几乎涵盖了预处理所有常用的方法,希望大家多思考预处理机制的原理,这样就能知道在适当的时候使用合适的方法了。