一尘不染

在MySQLi中选择* FROM

php

我的网站范围相当广泛,最近我刚切换到PHP5(称我为后期开发者)。

我之前所有的MySQL查询都是这样构建的:

"SELECT * FROM tablename WHERE field1 = 'value' && field2 = 'value2'";

这使得它非常容易,简单和友好。

由于明显的安全性原因,我现在正尝试切换到mysqli,并且SELECT * FROMbind_param需要特定参数时很难弄清楚如何实现相同的查询。

这句话已成为过去吗?

如果是的话,如何处理涉及大量列的查询?我真的需要每次都把它们全部打出来吗?


阅读 208

收藏
2020-05-26

共1个答案

一尘不染

"SELECT * FROM tablename WHERE field1 = 'value' && field2 = 'value2'";

变成

"SELECT * FROM tablename WHERE field1 = ? && field2 = ?";

传递给$mysqli::prepare

$stmt = $mysqli->prepare(
  "SELECT * FROM tablename WHERE field1 = ? && field2 = ?");
$stmt->bind_param( "ss", $value, $value2); 
// "ss' is a format string, each "s" means string
$stmt->execute();

$stmt->bind_result($col1, $col2);
// then fetch and close the statement

OP评论:

因此,如果我有5个参数,则可能会有“ sssis”之类的东西(取决于输入的类型?)

正确,?在准备好的语句中,每个参数都有一个类型说明符,它们都在位置上(第一个说明符适用于第一个?,由第一个实际参数替换(这是的第二个参数bind_param))。

mysqli将负责转义和引用(我认为)。

2020-05-26