PHP ADOdb Active Record :: Replace () ошибка (или функция?) - PullRequest
1 голос
/ 21 марта 2012

Вот мой код:

$user->user_id = 3;
$user->email='';
$user->password=md5('123456');
$user->Replace();

, тогда он генерирует sql:

UPDATE pre_user SET email=,password='e10adc3949ba59abbe56e057f20f883e' WHERE user_id=3

, так же как и то, что вы видите, здесь нет кавычек с пустой строкой.затем я следую коду для функции doquote () в adodb-active-record.inc.php: 631 и нашел код ниже:

    case 'C'://I think this means 'Char' and email field should be this.
    case 'X':
        if (is_null($val)) return 'null';

        if (strlen($val)>0 && 
            (strncmp($val,"'",1) != 0 || substr($val,strlen($val)-1,1) != "'")) { 
            return $db->qstr($val);
            break;
        }

он сообщает, что strlen ($ val)> 0 ...

Почему не добавляется кавычка в пустую строку?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2013

Я столкнулся с той же ошибкой, используя adodb-active-record.Я уверен, что функция поиска MetaType в adodb-datadict.inc.php отвечает за классификацию столбца электронной почты как «LVARCHAR», который отображается на «X».

Вот почему код doquote не улавливает регистр длины нулевой строки.

Я исправил это в своей базе кода, добавив корректирующий регистр 'X' в:

 case 'X':
    if (is_null($val)) return 'null';

    if (strlen($val)>0 &&
        (strncmp($val,"'",1) != 0 || substr($val,strlen($val)-1,1) != "'")) {
        return $db->qstr($val);
        break;
    }
    else {
        return 'null';
        break;
    }
0 голосов
/ 21 марта 2012

$user->email='' не равно нулю и имеет длину 0, а doquote() не обрабатывает этот конкретный сценарий.

Вы можете попробовать:

$user->email = NULL;

, но ваша база данных должна разрешить NULLзначения для этого поля.

...