2013-02-18 59 views
0

我完全沉迷於此。這裏是一個準備綁定命令,我使用激活用戶帳戶:PHP準備錯誤

$query = "UPDATE `users` SET `active` = b'1' WHERE `UUID` = ?"; 
$stmt_update = $mysqli->prepare($query); 
$stmt_update->bind_param('i' , $uuid); 
$stmt_update->execute(); 

如此活躍是MySQL中的位(1)字段和UUID是用戶的唯一ID,當我運行它,我得到的錯誤:

Fatal error: Call to a member function bind_param() on a non-object in /websites/.../activate.php on line 34 

我有在頁面上運行的另一個查詢,我也有$stmt->close;

關閉它關閉我嘗試了var_dump($stmt_update);返回bool(false)

查詢在phpMyAdmin運行正常只是沒有得到它準備設立=¬(

UPDATE

交換領域的一個布爾值,改變了我的查詢到這一點:

$query = "UPDATE `users` SET `active` = 1 WHERE `UUID` = ?"; 

無可用,因爲它仍然沒有準備聲明。還有什麼想法?

+2

不,它不會在phpMyAdmin運行正常。 SQL查詢肯定有語法錯誤。使用mysqli_error()來查明。 – mario 2013-02-18 22:58:00

+0

是的。輸入錯字:'= b'1'' – Peter 2013-02-18 22:59:55

+0

剛剛在phpmyadmin中再次檢查,沒有語法錯誤。錯字是什麼? – MrFuji87 2013-02-18 23:04:23

回答

0

右原來我想念我的關閉命令()形成之前的聲明。我用$stmt->close;$stmt->close();它總是最小的事....

無論如何,我改變了我現場發回了一下,active = b'1'工作得很好HUZZAR

1

您的查詢不正確,因此無法正確準備。

UPDATE `users` SET `active` = 1 WHERE `UUID` = ? 

將是正確的查詢(是你沒有使用BIT(1)),這是明智的,從隱含的布爾湖有位場移動的東西更明確地布爾:布爾值。

提示:ALTER TABLE users ALTER COLUMN active BOOL DEFAULT FALSE
BOOLtinyint(1)別名TRUE/FALSE是1/0的別名)

這是很好的做法來包裝你準備爲這樣的,因爲準備返回上失敗錯誤。

false->method()將始終引發致命錯誤。

if ($query = $db->prepare($sql)) { 
    //work on query 
} else { 
    echo "Query prepare failed"; 
    echo $sql; 
} 
+0

我應該說抱歉,但我已經嘗試了1和'1'。請注意,這是一個很好的字段,因此b在數字前加 – MrFuji87 2013-02-18 23:09:21

+0

爲什麼它不是一個布爾值?如果你想要真或假,請將其設爲真或假。顯式比隱式更好。 – Amelia 2013-02-18 23:11:11

+0

嘗試了布爾方法。還是一樣。我已經更新了主帖 – MrFuji87 2013-02-19 06:03:11

-2

使用

$query = "UPDATE `users` SET `active` = '1' WHERE `UUID` = :i"; 
+0

這是使用那個PDO方法吧?我不需要在某處宣佈我嗎? – MrFuji87 2013-02-18 23:13:56

+0

你在這裏''stmt_update-> bind_param('i',$ uuid);' – Jung3o 2013-02-18 23:14:23

+1

你正在混淆PDO和mysqli - bind_param()把值類型和值作爲參數,'i'是整數和$ uuid是價值 – 2013-02-18 23:17:02