就像往常一樣,我正在四處尋找PHP的最佳實踐,並且準備好的語句似乎是我現在應該如何閉上眼睛的東西。所以我開始玩弄一些我發現的例子。mysqli Prepared Statement in bindParam()不起作用
運行腳本時,我得到這個錯誤:
Fatal error: Call to a member function bindParam() on a non-object in /opt/lampp/htdocs/phpSecurity/PreparedStatments/Insert-Multi-Binded-Params/Insert Simple Method.php on line 10
這裏是不言而喻的代碼。
插入簡單Method.php
<?php
require_once '../config.php';
$stmt = $db->prepare("INSERT INTO coisas (nome, telefone, bi) VALUES (?, ?, ?)");
$nome = 'Fabio Antunes';
$telefone = 916810641;
$bi = 123093456;
$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);
$stmt->execute();
$stmt->close();
$db->close();
?>
的config.php
<?php
$server_host = 'localhost';
$server_user = 'root';
$server_password = '';
$server_db = 'PreparedStatements';
$db = new mysqli($server_host, $server_user, $server_password, $server_db);
?>
不知道我在做什麼錯在這裏,這是在php.net找到類似的例子,爲什麼不工作? PS:我認爲mysqli連接不是問題,因爲我用它來用SELECT SQL命令做一些準備好的語句。並且工作得很好。
編輯
分辨率和原因。
那麼在example我應該使用bind_param()
爲查詢中的每個值。但是,感謝Bart,他設法用我的代碼解決了這個問題。
在哪裏,它是:
$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);
它應該是:
$stmt->bind_param("sii", $nome, $telefone, $bi);
現在對於那些誰可能想知道什麼是 「SII」。
那麼bind_param爲我看到它綁定到每個問號「?」的「$ var」爲了。
所以有一個bind_param()
我可以同時綁定它們,正常使用bind_param()
需要指定綁定數據的類型。
我要綁定的第一個值是$nome
一個字符串,由「s」指定;
其他$telefone
和$bi
是整數,因爲他有「我」;
對於其他有類似問題的人來說,這裏還有其他數據類型(來自php.net)。
i = Integer;
s = String;
d = Double;
b = Blob;
如果有人作爲更好的解釋請發佈或評論。所以我可以改進我自己的。
謝謝。
良好的最佳實踐建議。我試過了,但沒有解決問題。任何其他想法? – 2009-11-04 21:36:47
$ stmt-> bind_param(「sii」,$ nome,$ telefone,$ bi);工作。 – 2009-11-04 21:45:22
很高興聽到它法比歐。 – 2009-11-04 21:46:23