Помогите, странное поведение XPDO
На одном сайте была проблема, в итоге все свелось к тому, что данный код:
На двух нормальных сайтах возвращал:
bool(false)
А на этом больном:
array(2) { [«parent»]=> string(1) «0» [«alias»]=> string(3) «239» }
Подскажите, что это может быть за проблема?
<?php
// Подключаем
define('MODX_API_MODE', true);
require 'index.php';
// Включаем обработку ошибок
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_INFO);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
$pathParentId = 0;
$temp = '`parent`, `alias`';
$temp2 = "`id`";
$query = $modx->newQuery('modResource');
$query->select($temp);
$query->where("{$temp2} = ?");
$query->prepare();
$query->stmt->execute(array($pathParentId));
$currResource= $query->stmt->fetch(PDO::FETCH_ASSOC);
var_dump($currResource);
На двух нормальных сайтах возвращал:
bool(false)
А на этом больном:
array(2) { [«parent»]=> string(1) «0» [«alias»]=> string(3) «239» }
Подскажите, что это может быть за проблема?
Комментарии: 4
Ну значит на этом сайте есть ресурс с id=0.
Нет, в коде нигде нет id 0, есть только parent 0
И вообще этот код создает бредовый SQL, который по определению не сможет ничего вернуть кроме ошибки.\
Так вот где-то вместо ошибки сделано чтоб выводился этот массив.
И вообще этот код создает бредовый SQL, который по определению не сможет ничего вернуть кроме ошибки.\
Так вот где-то вместо ошибки сделано чтоб выводился этот массив.
А что в БД в таблице modx_site_content? В коде у вас может и нет id=0, но в запросе у вас таки проверка на id = 0. И если в таблице есть ресурс с id=0 (что весьма странно), то он его и возвращает. Проверьте phpmyadmin каким-нибудь содержимое таблицы с ресурсами.
А, точно…
`id` =?
и execute(array($pathParentId)) подставляет 0.
Просто я смотрел код ->toSql() и там был? а не 0
Благодарю, вы были правы, Виталий и Иван.
`id` =?
и execute(array($pathParentId)) подставляет 0.
Просто я смотрел код ->toSql() и там был? а не 0
Благодарю, вы были правы, Виталий и Иван.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.