Спамят битым POST

fixxxer

К.О.
Партнер клуба
Ну InnoDB по умолчанию сделали, следующий логичный шаг - стрикт по умолчанию.

Можно было бы и сразу, конечно. Видимо, побоялись, что говнокодики у всех отвалятся.
 

Вурдалак

Продвинутый новичок
Код:
CREATE TABLE IF NOT EXISTS `table` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
PHP:
<?php

$s = 'test тест test'; // UTF-8
$s = iconv('utf-8', 'windows-1251', $s);

function truncate($s)
{
    $pattern = '/^(?:[\x09\x0A\x0D\x20-\x7E]'
             . '|[\xC2-\xDF][\x80-\xBF]'
             . '|\xE0[\xA0-\xBF][\x80-\xBF]'
             . '|\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}'
             . '|\xED[\x80-\x9F][\x80-\xBF]'
             . '|\xF0[\x90-\xBF][\x80-\xBF]{2}'
             . '|[\xF1-\xF3][\x80-\xBF]{3}'
             . '|\xF4[\x80-\x8F][\x80-\xBF]{2}'
             . ')*/';

    preg_match($pattern, $s, $m);

    return $m[0];
}

mysql_connect('localhost', 'root', 'root');
mysql_select_db('test');
mysql_set_charset('utf8');
mysql_query(sprintf('INSERT INTO `table` (`name`) VALUES ("%s")', mysql_escape_string($s)));

$res = mysql_query(sprintf('SELECT MD5(`name`) FROM `table` WHERE `id` = %d', mysql_insert_id()));
$hash = mysql_result($res, 0);

$substr = truncate($s);

var_dump($substr, $hash, md5($substr), strtolower($hash) === md5($substr));
string 'test ' (length=5)

string 'a2b2d66938b1f023dec6394f12b782b5' (length=32)

string 'a2b2d66938b1f023dec6394f12b782b5' (length=32)

boolean true
Такой ответ устроит?
 

whirlwind

TDD infected, paranoid
Вполне. Только это важно. И если с этим кто-то еще не столкнулся, то это потому что повезло. Но это бомба.
 
Сверху