2017-03-15 69 views
-1

我想更新表,但我不斷收到錯誤: 呼叫對布爾mysqli的綁定PARAM問題:調用一個成員函數bind_param()布爾

一個成員函數bind_param()我在做什麼錯誤? 在我的數據庫設置是這樣的:

'{"name":"Product Slider","product_name":"","product":["240","375","5555"],"limit":"5","width":"600","height":"400","loop":"1","auto":"1","pager":"1","pause":"3000","speed":"800","status":"1"}' 

我試圖更新:

$sliderSql=$con->prepare("UPDATE oc_module SET setting = '{'name':'Product Slider','product_name':'','product':[?],'limit':'5','width':'600','height':'400','loop':'1','auto':'1','pager':'1','pause':'3000','speed':'800','status':'1'}' WHERE oc_module.module_id = 95"); 

$param="'".$calcSlider[0]."','".$laptopSlider[0]."','".$serverSlider[0]."'"; 

$sliderSql->bind_param("s",$param); 
+0

使用'var_dump($ sliderSql);'看看它是由什麼組成的。 – castis

+0

您的準備工作失敗,因爲您的查詢語法不正確。提示:看看他在你的JSON字符串中的引號。 –

+0

@castis sliderSql是一個bool(false)。 – user3844579

回答

1

在你的SQL的報價是錯誤的。 JSON中的單引號會終止字符串。 JSON中的引號必須加雙引號。由於它們嵌入在字符串文字中,因此您需要將其轉義。

$sliderSql=$con->prepare("UPDATE oc_module SET setting = '{\"name\":\"Product Slider\",\"product_name\":\"\",\"product\":[?],\"limit\":\"5\",\"width\":\"600\",\"height\":\"400\",\"loop\":\"1\",\"auto\":\"1\",\"pager\":\"1\",\"pause\":\"3000\",\"speed\":\"800\",\"status\":\"1\"}' WHERE oc_module.module_id = 95"); 

但還有另一個問題。您不能將?參數放入字符串文字中 - 它們只能用於允許使用值表達式的位置。

如果您使用一個單獨的變量,使用json_encode()轉換爲JSON,會更容易。

$setting = json_encode(array(
    "name" => "Product Slider", 
    "product_name" => "", 
    "product" => array($calcSlider[0], $laptopSlider[0], $serverSlider[0]), 
    "limit" => "5", 
    "width" => "600", 
    "height" => "400", 
    "loop" => "1", 
    "auto" => "1", 
    "pager" => "1", 
    "pause" => "3000", 
    "speed" => "800", 
    "status" => "1")); 
$sliderSql = $con->prepare("UPDATE oc_module SET setting = ?"); 
$sliderSql->bind_param("s", $setting); 
相關問題