我正在寫我的第一個PHP類,嘗試學習面向對象的概念。此代碼的目標是將用戶的IP和相關參數記錄到數據庫中,我可能稍後將其用作應用臨時禁令的基礎。 (不,我們不要討論這個策略的優點 - 讓我們繼續編碼類吧!)。這是我有:爲什麼我的第一個PHP類沒有按預期工作?
class banAss {
public function __construct(mysqli $db){
$this->db = $db;
$this->visitip = $_SERVER['REMOTE_ADDR'];
$this->visitAgent = $_SERVER['HTTP_USER_AGENT'];
$this->visitDate = time();
}
public function addBan(){
$sql = "Insert into banned (visitIP, visitAgent, visitDate,) values (?, ?, ?)";
$stmt = mysqli_prepare($this->db, $sql);
mysqli_stmt_bind_param($stmt, "ssi", $this->visitip, $this->visitAgent, $this->visitDate);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
}
}
$banned = new banAss($db);
$banned->addBan();
值得注意的是,我確實有一個有效的數據庫連接,已使用mysqli打開。我一直在玩關於這個錯誤消息的whackamole。目前他們站在:
Warning: mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, boolean given in /home/c9/public_html/admin/login.php on line 16
Warning: mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, boolean given in /home/c9/public_html/admin/login.php on line 17
Warning: mysqli_stmt_close() expects parameter 1 to be mysqli_stmt, boolean given in /home/c9/public_html/admin/login.php on line 18
我不明白這些消息。他們也許建議,可能造成變量$ stmt的'mysqli_prepare'這行不知怎麼搞亂了,但是怎麼做?
謝謝!我按照你的建議做了,它在sql中是一個簡單的語法錯誤(最後一個參數visitDate後面的尾隨逗號)。我認爲學習一項新技術使我能夠首先尋找最神祕的原因,而不是最微不足道的原因。謝謝你幫助我看到在我面前的是什麼。 – Frankie