我将我的php / mySQL代码转换为使用预准备语句。 我可以看到准备SQL或DML和绑定参数的值(安全性等)。但我的查询按名称指定选择列表中的字段,我使用关联数组来访问它们。
或者,在这样的情况下,我是否需要对结果数组中的索引做出假设?
$listquery = "SELECT {$tables["result"]}.time, " .
" HOUR({$tables["result"]}.time), " . // [1]
" MINUTE({$tables["result"]}.time), " . // [2]
" SECOND({$tables["result"]}.time), " . // [3]
" {$tables["rider"]}.id, {$tables["rider"]}.gender, " .
" {$tables["rider"]}.first, {$tables["rider"]}.last, " .
" {$tables["result"]}.dnf, " .
" {$tables["race"]}.courseid " .
" FROM {$tables["race"]}, {$tables["result"]}, {$tables["rider"]} " .
" WHERE {$tables["race"]}.raceid = {$tables["result"]}.raceid " .
" AND {$tables["result"]}.riderid = {$tables["rider"]}.id" .
" AND {$tables["race"]}.raceid = ? " .
" ORDER BY {$tables["result"]}.dnf, {$tables["result"]}.time ASC ";
答案 0 :(得分:2)
如果您正在使用MYSQLND
驱动程序,则可以使用mysqli_fetch_assoc
或mysqli_stmt_bind_param
来获取准备好的查询的结果。这两种方法都没有特别的好处。
如果您没有MYSQLND
驱动程序,获取SELECT
查询结果的唯一方法是使用mysqli_stmt_bind_param
。
使用关联数组来指定表名并不重要。您仍在AND {$tables["race"]}.raceid = ?
中使用占位符,因此您需要准备查询。