在mysqli
php庫中,在bind_param()
方法中,將參數綁定到查詢。 bind_param()
的第一個參數是types
,這是一個字符串,其中每個字符表示數據類型pass,例如,'s'表示字符串。使用mysqli來防止sql注入,如何設置NULL或CURRENT_DATE?
$query = "update users set update_usr_id = ? where user_id = ?"; $arg1 = ($update_usr_id=$usr_id) ? '2011-01-01' : 'CURRENT_DATE'; $arg2 = $update_usr_id;
如何將NULL或CURRENT_DATE表示爲參數?
例如,嘗試'CURRENT_DATE'作爲字符串,但發佈爲「0000-00-00」。 (據我可以告訴「0000-00-00」,一個非法的日期,對於不使用NULL的人來說,它是一個用於NULL的mysqlism,這顯然是相當多的)。
使用參數,如何使用NULL和CURRENT_DATE?
@Johan指出,NULL 做工作。在測試中,這似乎是真實的,但不是。會發生什麼情況是,從第一個NULL參數開始,所有參數都設置爲NULL!
默認值與此無關。有很多次我希望在UPDATE中將列設置爲NULL或CURRENT_DATE - 而不是INSERT - 因此默認值在事務中不起作用。
另外,編寫觸發器以覆蓋mysqli
的不足之處的想法是相當不好的編程 - 在我的日子裏寫了意大利麪條觸發器,我是一個可以說話的人。觸發器更新日誌是一回事 - 像這樣的觸發器將會是一個持續的維護噩夢,而代碼幾乎不會被正確維護。
與其試圖在您的PHP代碼中執行此操作,不如設計數據庫模式更好,以便這些值是給定列的默認值。那樣你所需要做的只是不提供你的php代碼中的數據。 – shawty
由於兩個原因不起作用:第一,如果試圖更新現有值,第二,只要值可能爲空,就不得不提供兩個(或多個)完全不同的查詢。 –