提问人:Antonio 提问时间:11/1/2023 更新时间:11/2/2023 访问量:42
Bind Param - 多值数据 - VarChar
Bind Param - Multi Value Data - VarChar
问:
我正在尝试学习准备好的语句和绑定参数。pHp 手册中的代码
我具体查看的是以下代码:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");
$mysqli->query("DROP TABLE IF EXISTS test");
$mysqli->query("CREATE TABLE test(id INT)");
$values = [1, 2, 3, 4];
$stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (?), (?), (?), (?)");
$stmt->bind_param('iiii', ...$values);
$stmt->execute();
我收集的是 bind_param() 中,您需要相应地为每个值包含一个“i”表示整数或一个“s”表示字符串,很可能是按确切的顺序。(如果我的假设是错误的,请纠正我)
我的主要问题是我需要做些什么才能将整数和字符串 (VarChar) 都存储到数据库中?“s”就足够了吗?另外,特殊字符呢?这也有bind_param吗?或者“s”会像 Varchar 一样读出数据库中的密码吗?
另外,作为奖励,有人可以解释一下这三个......在 $values 变量之前:
$stmt->bind_param('iiii', ...$values);
我假设每个点都是一个值,最终值是变量本身?
关于这段代码,我想知道的最后一件事是:
$mysqli = new mysqli("example.com", "user", "password", "database");
mysqli() 函数之前的“new”。这对于准备好的陈述真的有必要吗?
(“我尝试了什么,我期待什么?我实际上还没有尝试过这样的事情,在我决定重写我的整个登录/注册码之前,我会问这个问题。我决定我更喜欢使用准备好的语句而不是 mysqli_query(),因为我听说它容易受到SQL_Injections以我目前的方式编码的影响。我想做的是将准备好的语句用于多个值。我需要更多关于存储 VarChar 的信息,以及这是否真的是一种更好或更安全的方法。
答:
@CBroe提供了答案:
问题 1:我应该对 varchar 使用哪个指针?
答案1:Bind_Param PhP手册
- i - 整数
- s - 字符串
- d - 十进制
- b - 斑点
对于 varchar 类型的数据,字符串是可以的。
问题2:这三个点有什么作用?(...$values)
答案 2:spread 运算符可以将数组或列表读出到值集中。(至少这是 1 次使用点差运算符)
问题 3:“new”关键字有什么作用,正确使用准备好的语句是否需要它?
答案 3:如果使用函数而不是类,则不需要“new”。面向对象与过程是区别。
评论
new