Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CAKEPHP 2.0 updateALL,json_编码数据_Php_Mysql_Json_Cakephp_Update All - Fatal编程技术网

CAKEPHP 2.0 updateALL,json_编码数据

CAKEPHP 2.0 updateALL,json_编码数据,php,mysql,json,cakephp,update-all,Php,Mysql,Json,Cakephp,Update All,我的一个控制器功能有另一个问题。我已经编写了一个函数来更新数据库中的一些字段。我从一个解码的json_文件中抓取内容,抓取数据后,我再次对其进行编码,以便将其存储在数据库中。我犯了一些我不明白的错误 我的功能 public function admin_update_rulings() { $this->loadModel('Magicsets'); $this->loadModel('Cards'); $this->autoRender = false

我的一个控制器功能有另一个问题。我已经编写了一个函数来更新数据库中的一些字段。我从一个解码的json_文件中抓取内容,抓取数据后,我再次对其进行编码,以便将其存储在数据库中。我犯了一些我不明白的错误

我的功能

public function admin_update_rulings()
{
    $this->loadModel('Magicsets');
    $this->loadModel('Cards');
    $this->autoRender = false;
    $code = 'LEA';
    $cards = file_get_contents('http://mtgjson.com/json/' . $code . '-x.json');

    $decodedcards = json_decode($cards);
    $this->Card->query("SET CHARACTER SET utf8");


    foreach ($decodedcards->cards as $cards) {
        $mvid = $cards->multiverseid;
        $legal = json_encode($cards->legalities);
        $rulings = '';
        if (!empty($cards->rulings)) {
            $rulings = json_encode($cards->rulings);
        } else {
            $rulings = json_encode('leeg');
        }

        $this->Cards->updateAll(
            array('rulings' => $rulings),   //fields to update
            array('multiverseid' => $mvid)  //condition
        );
    }
}
我收到的错误消息是:

数据库错误

错误:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解在“[{”日期“:“2008-08-01”,“文本“:“此卡已恢复其原始功能”第1行附近使用的正确语法

SQL查询:将
magicmm
卡更新为
设置
规则=[{“日期”:“2008-08-01”,“文本”:“此卡已恢复其原始功能。如果它对已经是生物的神器进行附魔,则不会改变其威力和韧性。”},{“日期”:“2008-08-01”,“文本”:”一个变成生物的非生物永久物可以攻击,并且它的{T}能力可以被激活,前提是它的控制者从他或她最近一次回合开始就持续控制该永久物。这与永久物成为生物的时间长短无关。“}]WHERE
multiverseid
=96

注意:如果要自定义此错误消息,请创建app/View/Errors/pdo_error.ctp


如果您有任何关于解决此问题的帮助,我们将不胜感激:-)。

在Cake中使用
updateAll()
时,您需要将字符串用引号括起来。您可以使用数据源的
value()
方法:-

$db = $this->getDataSource();
$value = $db->value($rulings, 'string');
$this->Cards->updateAll(
    array('rulings' => $rulings),   //fields to update
    array('multiverseid' => $mvid)  //condition
);
如果在保存时知道主键,则最好使用
save()
而不是
updateAll()


请参阅接受的答案以获得更全面的解释。

谢谢大家的建议。我决定研究一下你们建议我使用的保存方法。它为我解决了问题,现在一切正常。我将更新代码更改为此

        $updaterow = $this->Cards->find('first', array('fields' => array('id'), 'conditions' => array('multiverseid' => $mvid), 'limit' => 1));
        $id = $updaterow['Cards']['id'];

        $data = array('id' => $id, 'rulings' => $rulings, 'legalities' => $legal);

        $this->Cards->save($data);

如果您用CAKEPHP存储JSON,请考虑以下内容: