2010-03-01 38 views
1

IM跟蹤了bug,其中一個變量i有被在某一點發生變化,而這正是我發現這個問題:PHP正在改變我的變量的值,因爲我將它綁定爲一個mysqli參數?

echo "2. page is $page<br>"; 
$h = $page; 
//Ok everything is done. Now need to update the view counter 
$query = "UPDATE pages SET views=views+1 WHERE id=? LIMIT 1"; 
if($stmt = $db -> prepare($query)) 
{ 
    $stmt -> bind_param("i", $page); 
    $stmt ->execute(); 
    $stmt ->close(); 
} 
else 
    dberror(); 
echo "3. page is $page<br>"; 
$page = $h; 
echo "4. page is $page<br>"; 

所以我得到這個:

2. page is page 
3. page is 0 
4. page is page 

我只是添加在$ h變量中,試圖解決問題並且工作。所以出於某種原因,sql查詢正在嘗試我的頁面變量。有誰知道爲什麼會發生?

回答

4

您將其綁定爲整數:$stmt->bind_param("i", $page);,但它實際上是一個字符串:"page"

bind_param將一個對實際變量的引用綁定到該語句,而不是其副本。所以它必須修改該變量,將其轉換爲一個整數以作爲一個綁定整數參數。

整數值"page"(實際上,任何不包含數字的字符串)的值是0,所以這就是爲什麼你看到它變成0

+0

相關,PHP 最討厭的部件中的一個'<?PHP的 如果(0 =='page'){ echo'true'; } else { echo'false'; } ?>' 代碼示例運行: http://ideone.com/1CYzfhqu – Kzqai 2010-03-02 00:01:10

0

$page通過引用bind_param("i", $page);從而通過作爲人提到,PHP轉換它爲int,這就是爲什麼它被破壞

相關問題