|
|
|
|
|
для: Гекко
(14.03.2009 в 17:30)
| | Я удалил из срипта абсолютно всё, что не касается ошибки исполнения SELECT, и осталось буквально три строки, из которых со всей очевидностью следовало, что SELECT работает неверно, выдавая идентификатор строки, не соответствующей условиям запроса. За этими манипуляциями провел вчерашний и сегодняшний день, перепробовав все возможное вплоть до перезагрузки сервера. Хотел даже в техподдержку написать, чтобы версию мускула проверили.
А проблема оказалась простой до смешного! И лечится
Впредь мне будет наука - переменные надо очищать! | |
|
|
|
|
|
|
|
для: Владимир55
(14.03.2009 в 11:48)
| | В таком случае (ищите "index.htm", а получаете "10.htm") путаница где-то не тут. Попробуйте на время отладки написать:
$str = 'index.htm';
$sql = "SELECT id, str FROM bot_knigi WHERE str = '" . mysql_escape_string($str) . "'";
$resl = mysql_query($sql);
if (mysql_num_rows($resl) < 1)
{
echo "Названия '" .htmlspecialchars($str). "' нет в таблице";
}
while ($r = mysql_fetch_assoc($resl)) {
echo htmlspecialchars("{$r['id']}:{$r['str']}"), '<br/>';
}
|
Быть такого не может, чтобы вывелись левые названия страниц. Только index.htm, если он есть в таблице.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Владимир55
(14.03.2009 в 00:47)
| | Вместо вот этой строки:
$res1 = mysql_query("SELECT id FROM bot_knigi WHERE str = '$str'");
|
поставьте вот это:
$sql = "SELECT id FROM bot_knigi WHERE str = '$str'";
print $sql;
$res1 = mysql_query($sql);
|
Запустите скрипт еще раз.
Выведется строка. Покажите ее здесь. | |
|
|
|
|
|
|
|
для: Гекко
(14.03.2009 в 11:44)
| | Лингвистическая правка уместна. Но что это меняет? | |
|
|
|
|
|
|
|
для: Владимир55
(13.03.2009 в 22:50)
| | > Этот запрос выдает номера строк
Не номера строк, а их идентификаторы. | |
|
|
|
|
|
|
|
для: sl1p
(14.03.2009 в 01:00)
| | magic_quotes_gpc - отключил
$str = addslashes($str); - попробовал
$str = mysql_escape_string($str); - попробовал
Никакого эффекта!
(Вернул всё в прежнее состояние и перезагрузил) | |
|
|
|
|
|
|
|
для: Владимир55
(14.03.2009 в 00:47)
| | magic_quotes_gpc
настройка в php.ini
включенные обычно только мешают и путают.
ну а может всё таки стоит попрбовать так?)
$str = addslashes($str);
либо
$str = mysql_escape_string($str);
ибо както в коде подозрительно выглядит, хотя и закомментировано -) | |
|
|
|
|
|
|
|
для: sl1p
(14.03.2009 в 00:34)
| | Скрипт анализирует посещаемость ботов, беря данные из таблицы bot.
Вот такой фрагмент скрипта:
$n = 0;
unset($row); // Удаление массива
$res = mysql_query("SELECT * FROM bot ");
while($row = mysql_fetch_assoc($res))
{
$str = $row['str'];
$namebot = $row['namebot'];
$time_s = $row['time_s'];
++$n;
// addslashes($str);
echo "no $n $str ";
unset($row1); // Удаление массива
$res1 = mysql_query("SELECT id FROM bot_knigi WHERE str = '$str'");
while($row1 = mysql_fetch_assoc($res1)) $id1 = $row1['id'];
if ($id1)
{
echo " Найдена строка $id1, содержащая $str <br><br> ";
// mysql_query("UPDATE bot_knigi SET `".$namebot."` = '$time_s' WHERE id = '$id1'");
if ($n == 10 ) die ;
}
else
{
mysql_query ("INSERT INTO bot_knigi (str, `".$namebot."`) VALUES ('$str', '$time_s')");
$o_id = mysql_insert_id();
echo " Создана строка $o_id <br><br> ";
}
}
|
В таблице bot_knigi образуются вот такие записи:
id str
1 46/mulik.htm
2 10.htm
3 161/pisjukov.h
4 41.htm
5 33.htm
При работе скрипта получаю:
no 1 46/mulik.htm Создана строка 1
no 2 10.htm Создана строка 2
no 3 161/pisjukov.h Создана строка 3
no 4 41.htm Создана строка 4
no 5 33.htm Создана строка 5
no 6 33.htm Найдена строка 5, содержащая 33.htm
no 7 41.htm Найдена строка 4, содержащая 41.htm
no 8 10.htm Найдена строка 2, содержащая 10.htm
no 9 45.htm Найдена строка 2, содержащая 45.htm
no 10 42.htm Найдена строка 2, содержащая 42.htm
|
В двух последних строках видна ошибка поиска, когда в одной и той же строке под номером 2 селект видит разные значения. Далее эта ошибка повторяется много раз. | |
|
|
|
|
|
|
|
для: Владимир55
(14.03.2009 в 00:31)
| | ну дайте дамп таблицы хотябы :) | |
|
|
|
|
|
|
|
для: sl1p
(14.03.2009 в 00:14)
| | Это addslashes($str) не повлияло, а что такое magic_quotes, я пока что не знаю.
Признаться, я в изумлении: отловил скрипт непосредственно на выполнении ошибочной операции и остановил его. Теперь посредством PhpMyAdmin я вижу следующее: оператор SELECT выбирает строку, содержимое которой СОВЕРШЕННО не имеет ничего общего с условием выборки!
Встает вопрос, как вообще можно полагаться на работу MySQL, если она выкидывает такие фокусы?! | |
|
|
|
|