Консультация № 43731
21.05.2006, 11:32
0.00 руб.
0 4 4
Здравствуйте, эксперты!
Помогите найти ошибку.
При выполнении кода выдает, что не возможно выполнить запрос, хотя к базе данных подключается нормально, и таблица, в которую нужно занести тоже открывается и дает к себе доступ.

Приложение:
<?phpinclude ("string_date.php");$month = "";$_data = array(1 => "", 2 => "", 3 => "");$_naim = array(1 => "", 2 => "", 3 => "");$_kolvo = array(1 => "", 2 => "", 3 => "");$_sum = array(1 => "", 2 => "", 3 => "");$_kateg = array(1 => "", 2 => "", 3 => "");$_datadb = array(1 => "", 2 => "", 3 => "");/*Получаем данные введеные в html-формуТут все работает*/for ($i = 1; $i<=3; $i++){$_data[$i] = $_POST[‘date‘.$i];$_naim[$i] = $_POST[‘naim‘.$i];$_kolvo[$i] = $_POST[‘kolvo‘.$i];$_sum[$i] = $_POST[‘sum‘.$i];$_kateg[$i] = $_POST[‘kateg‘.$i];$_datadb[$i] = DatePHPToDateDB($_data[$i], $month);}/*Вставляем данные в таблицу htmlтут все работает*/for ($i = 1; $i<=3; $i++){echo "<tr>";echo "<td>";echo $_data[$i];echo "
";echo $_datadb[$i];echo "</td>";echo "<td>";echo $_naim[$i];echo "</td>";echo "<td>";echo $_kolvo[$i];echo "</td>";echo "<td>";echo $_sum[$i];echo "</td>";echo "<td>";echo $_kateg[$i];echo "</td>";echo "</tr>";}echo "
";$db_name = "";if ($rc = mysql_connect("localhost","test_lordfa","1q2w3e4r")) { echo "MySQL работает"; $db_name = "test_lordfa"; if (!mysql_select_db($db_name, $rc)) { echo "Не могу соединиться с базой данных"; exit(); } else {/*Вставляем данные из html-формы в БДвот тут пишет, что не могу выполнить запрос*/ for ($i = 1; $i<=3; $i++) { $sql = "INSERT INTO avans (data, sum, naim, kolvo, kategoria) VALUES (" . $_datadb[$i] . "," . $_sum[$i] . "," . $_naim[$i] . "," . $_kolvo[$i] . "," . $_kateg[$i] . ")"; if (!mysql_query($sql, $rc)) { echo "Не могу выполнить запрос"; } } } }else { echo "MySQl не работает"; } mysql_close($rc);?>

Обсуждение

Неизвестный
21.05.2006, 11:41
общий
это ответ
Здравствуйте, Godal!
Все поля, которые у Вас не числового типа нужно заключать в кавычки.
Т. е. Ваш запрос после его формирования выглядит так (echo $sql;):
INSERT INTO avans (data, sum, naim, kolvo, kategoria) VALUES (ddd,ddd,fff,gfhh,ffff);
(В скобочках значения для примера), а нужно вот так:
INSERT INTO avans (data, sum, naim, kolvo, kategoria) VALUES (‘ddd‘,‘ddd‘,‘fff‘,‘gfhh‘,‘ffff‘);
Числовые поля не обязательно заключать в кавычки. Я посчитал, что у Вас поле sum числовое, а остальные - нет. Запрос должен выглядеть так:
$sql = "INSERT INTO avans (data, sum, naim, kolvo, kategoria) VALUES (‘" . $_datadb[$i] . "‘," . $_sum[$i] . ",‘" . $_naim[$i] . "‘,‘" . $_kolvo[$i] . "‘,‘" . $_kateg[$i] . "‘)";
Неизвестный
21.05.2006, 15:16
общий
это ответ
Здравствуйте, Godal!
А типы всех полей - целочисленные?
Кавычки не стоят.
И MySQL выполняет запрос
INSERT INTO avans (data, sum, naim, kolvo, kategoria) VALUES (datadb, sum, naim, kolvo, kateg)
Если datadb, sum, naim, kolvo, kateg - это целые числа и data, sum, naim, kolvo, kategoria - это целочисленные поля, тогда причина неизвестна. если нет, то все ясно - надо ставить кавычки вокруг строк.

Т.е. INSERT INTO avans (data, sum, naim, kolvo, kategoria) VALUES (‘datadb‘, ‘sum‘, ‘naim‘, ‘kolvo‘, ‘kateg‘)

А вообще, для отладки можно было изменить код так:
for ($i = 1; $i<=3; $i++)
{
$sql = "INSERT INTO avans (data, sum, naim, kolvo, kategoria) VALUES (" . $_datadb[$i] . "," . $_sum[$i] . "," . $_naim[$i] . "," . $_kolvo[$i] . "," . $_kateg[$i] . ")";
if (!mysql_query($sql, $rc))
{
echo "Не могу выполнить запрос $sql
";
}
}
И ты бы увидел, что у тебя получается. Если ошибка в запросене видна, беремэтот запрос и выполняем в phpMyAdmin (я такделаю) или в консоли MySQL. Оба варианта говорят, в чем ошибка.

Еще ошибка может быть, если у пользователя test_lordfa нет прав на вставку в БД test_lordfa в таблицу avans.
Неизвестный
22.05.2006, 08:31
общий
это ответ
Здравствуйте, Godal!
возможно у вас есть в таблице текстовые поля (при выполнении запроса их значения надо брать в одинарные кавычки ‘привет‘).
Если все поля числовые, то проверьте, возможно у вас потерялось какое то значение и там пусто либо не число, тогда естественно будет выдаваться ошибка в запросе.
Неизвестный
22.05.2006, 10:19
общий
это ответ
Здравствуйте, Godal!
Насколько я понимаю $_kateg - текстовые данные. Их в базу надо писать ссответственно как тект (в одиночных кавычках), тоесть Ваш запрос должен выглядеть примерно так:

$sql = "INSERT INTO avans (data, sum, naim, kolvo, kategoria) VALUES (" . $_datadb[$i] . "," . $_sum[$i] . "," . $_naim[$i] . "," . $_kolvo[$i] . ",‘" . $_kateg[$i] . "‘)";

А еще не мешало бы использовать функцию addslashes на случай если строка содержит специальные символы SQL(‘ и \):

$sql = "INSERT INTO avans (data, sum, naim, kolvo, kategoria) VALUES (" . $_datadb[$i] . "," . $_sum[$i] . "," . $_naim[$i] . "," . $_kolvo[$i] . ",‘" . addslashes($_kateg[$i]) . "‘)";
Форма ответа