新手,用的是yii框架1.1,今天在練習資料庫DAO的CRUD更新操作時候,遇到了問題,請看代碼:
意思是我要將資料庫表中name值為lishenglong的記錄更新為smart,資料庫表記錄如下:
也就是批次更新,將下面4行記錄更新了,但是不是這樣的,
執行結果是只更新了第一行,什麼情況? ?
我開啟了日誌檢視執行的sql語句,語句如下:
找到原因了,就是綁定參數的時候,把我的更新條件name='lishenglong'的更新條件覆蓋了,我的更新條件是name='lishenglong',解析的時候變成了name='smart' ,name='smart'其實是我要更新的新值,而不是更新條件啊,不知道我說明白了嗎?還請踩過坑的大嬸給我講講原因,並給我解決方案,感激不盡~
新手,用的是yii框架1.1,今天在練習資料庫DAO的CRUD更新操作時候,遇到了問題,請看代碼:
意思是我要將資料庫表中name值為lishenglong的記錄更新為smart,資料庫表記錄如下:
也就是批次更新,將下面4行記錄更新了,但是不是這樣的,
執行結果是只更新了第一行,什麼情況? ?
我開啟了日誌檢視執行的sql語句,語句如下:
找到原因了,就是綁定參數的時候,把我的更新條件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>