2012-12-12 69 views
4

我在學習如何在MySQLi中使用預準備語句來插入數據。如果在循環中使用MySQLi準備語句,何時調用bind_param?

即使準備好的語句因重複執行類似語句的能力而備受讚譽,我似乎無法找到使用MySQLi在循環中執行多個語句的示例。我特別困惑以下

  • 是否我的循環之前或我的循環
  • 是否之前或調用bind_param
後賦值給我的變量裏面調用 bind_param

關於準備語句的大多數教程都使用PDO。通過PDO,可將一組參數值傳遞給execute,無需致電bindParam。 MySQLi並非如此。

PHP手冊mysqli_prepare條目具有一個顯示以下的操作順序的一個示例:

  1. 給變量賦值
  2. 準備聲明
  3. 綁定變量
  4. 執行
  5. 靠近

通過上面的判斷,我假定我需要在我的循環中調用綁定語句。

然而,PHP手冊mysqli_stmt_execute條目具有一個顯示以下的操作順序的一個示例:

  1. 準備聲明
  2. 綁定變量
  3. 給變量賦值
  4. 執行
  5. 分配變量值
  6. 執行
  7. close

請注意,此示例沒有顯示的一點是首先聲明變量的位置。我認爲將未聲明的變量傳遞給bind_param會生成通知。我終於明白,我可以傳遞未定義的變量,因爲它們是通過引用傳遞的。

問題
一個操作順序是否比其他操作順序更優先?還是僅僅取決於你在做什麼?是否有任何與其中一個陷阱?

說明:代碼已經使用MySQLi,我不想切換到PDO(現在切換不在此項目範圍內)。

+0

你在循環什麼?你可以在你的循環中調用'bind_param'然後'執行'。我不完全理解我猜的問題。 –

+0

你應該在*'bind_param'前明確設置你的變量*。這將使它更容易調試。 –

+1

我的困惑源於被'傳遞*價值*'的思維所困擾。我一直在想,在改變數值之後,我應該重新綁定它們。 – toxalot

回答

3

因爲參數是通過參考過去了,你可以前調用bind_param之後將值賦給變量。無論哪種方式將工作。

如果變量通過傳遞,則每次更改其值時都需要綁定它們。但是因爲它們是通過引用傳遞的,所以你只需要綁定一次。

在單次執行的情況下,操作順序並不重要,可能取決於值的來源。 在循環的情況下,您應該在循環之前確定調用bind_param

相關問題