首頁  >  文章  >  後端開發  >  yii 帶參數的更新操作 更新失敗 很詭異

yii 帶參數的更新操作 更新失敗 很詭異

WBOY
WBOY原創
2016-09-21 14:13:111115瀏覽

新手,用的是yii框架1.1,今天在練習資料庫DAO的CRUD更新操作時候,遇到了問題,請看代碼:

yii 帶參數的更新操作 更新失敗 很詭異
意思是我要將資料庫表中name值為lishenglong的記錄更新為smart,資料庫表記錄如下:

yii 帶參數的更新操作 更新失敗 很詭異
也就是批次更新,將下面4行記錄更新了,但是不是這樣的,
執行結果是只更新了第一行,什麼情況? ?
我開啟了日誌檢視執行的sql語句,語句如下:

yii 帶參數的更新操作 更新失敗 很詭異

yii 帶參數的更新操作 更新失敗 很詭異

找到原因了,就是綁定參數的時候,把我的更新條件name='lishenglong'的更新條件覆蓋了,我的更新條件是name='lishenglong',解析的時候變成了name='smart' ,name='smart'其實是我要更新的新值,而不是更新條件啊,不知道我說明白了嗎?還請踩過坑的大嬸給我講講原因,並給我解決方案,感激不盡~

回覆內容:

新手,用的是yii框架1.1,今天在練習資料庫DAO的CRUD更新操作時候,遇到了問題,請看代碼:

yii 帶參數的更新操作 更新失敗 很詭異
意思是我要將資料庫表中name值為lishenglong的記錄更新為smart,資料庫表記錄如下:

yii 帶參數的更新操作 更新失敗 很詭異
也就是批次更新,將下面4行記錄更新了,但是不是這樣的,
執行結果是只更新了第一行,什麼情況? ?
我開啟了日誌檢視執行的sql語句,語句如下:

yii 帶參數的更新操作 更新失敗 很詭異

yii 帶參數的更新操作 更新失敗 很詭異

找到原因了,就是綁定參數的時候,把我的更新條件name='lishenglong'的更新條件覆蓋了,我的更新條件是name='lishenglong',解析的時候變成了name='smart' ,name='smart'其實是我要更新的新值,而不是更新條件啊,不知道我說明白了嗎?還請踩過坑的大嬸給我講講原因,並給我解決方案,感激不盡~

查看Yii1.1的類別參考手冊的system.db.CDbCommand的update方法中,方法原型如下:

<code>public integer update(string $table, array $columns, mixed $conditions='', array $params=array ( ))</code>

其中$params有句特別說明

<code>Do not use column names as parameter names here. They are reserved for $columns parameter.</code>

意思就是不要使用欄位名稱作為佔位符名稱。
解決方法是

<code>'name=:cname',array(':cname'=>'lishenglong')</code>
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn