2016-03-03 84 views
0

我正在將我的php/mySQL代碼轉換爲使用預準備語句。 我可以看到準備SQL或DML和綁定參數的值(安全等)。但我的查詢按名稱指定了選擇列表中的字段,並使用關聯數組來訪問它們。mysqli_stmt_bind_result的優點是什麼?

或者,在這樣的一個地方,我不得不做出的結果數組中的索引的假設情況下幫助?

$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

我會更開心,如果這個問題有一個像'verifiable','meaningful','conceptual'減少像答案的可能性_some_預選賽「在這種特殊情況下bind_result爲0.000000345±1.2納秒我更快(不進一步指定)machine「;-) – VolkerK

回答

2

如果您使用的MYSQLND驅動程序,您可以使用mysqli_fetch_assocmysqli_stmt_bind_param得到一個準備好的查詢的結果。這兩種方法都沒有特別的好處。

如果您沒有MYSQLND驅動程序,獲得SELECT查詢結果的唯一方法是使用mysqli_stmt_bind_param

您使用的關聯數組指定表名是不是真的有關。您仍在使用AND {$tables["race"]}.raceid = ?中的佔位符,因此您需要準備查詢。

+0

對不起,關於綁定表標識符的註釋是由我而不是OP。我指的「把變量到SQL允許SQL注入。您應該使用mysql_stmt_bind_param來解決這個問題」,因爲那裏根本沒有什麼_more_的OP可以做與MySQL預處理語句+參數;-) – VolkerK

+0

我準備查詢並綁定一個參數(或者當我完成轉換時)。但我**不使用mysqli_stmt_bind_result檢索選定列 – BryanT

+0

@BryanT **如果你有MYSQLND驅動程序,這很好。 – Barmar