Происходит что-то странное, не могу указать пальцем, почему.
Массив $ регионов - это обратный словарь регионов [regionCode => regionID]. В функции parse_r () где проверяется наличие нового regionCode, если да, то этот regionCode добавлен в словарь. Это единственное место для добавления нового региона. Но иногда (возможно, в 1 из 50 случаев) добавляется новая строка с ранее существовавшим названием региона. regionCode - текстовое, не уникальное поле.
Почему это происходит, что я делаю не так?
function reps() {
global $mysqli;
$regions=get_regions();
...
$status = parse_r($filename);
...
}
function get_regions() {
global $mysqli;
$regions=array();
$sql = 'SELECT * FROM `regionCodes` ORDER BY `regionCodes`.`id` DESC';
$res = $mysqli->query($sql);
if ( $res !== false ) {
while ($row = $res->fetch_assoc()) {
$regions[$row['regionCode']]=$row['id'];
}
}
return $regions;
}
function parse_r($filenameFull) {
global $mysqli, $regions;
$r['regionCode']=$ttt['regionCode'];
if ( !(array_key_exists($r['regionCode'], $regions)) ) {
$sql = sprintf("INSERT INTO `regionCodes`(`regionCode`) VALUES ('%s')", $mysqli->real_escape_string($r['regionCode']) );
$res = $mysqli->query($sql);
$regions=get_regions();
}
$r['regionID'] = $regions[$r['regionCode']];
В базовом поиске mysql по regionCode = .. отображаются все строки с таким же regionCode. Не знаю, правильная ли это проверка постфактум ... Также этот трюк `ORDER BY regionCodes
.id
DESC` гарантирует, что $ r ['regionID'] всегда будет наименьшим значением
То, что выглядит одинаково, не всегда может быть одинаковым. Вы проверяли наличие пробелов или непечатаемых символов? Вы также должны обрезать $ r ['regionCode'] и т. д.