Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) Иногда не отправляются запросы в бд mysql / 12 сообщений из 12, страница 1 из 1
08.05.2014, 17:57
    #38637107
Dobry_cat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) Иногда не отправляются запросы в бд mysql
Добрый день, есть скрипт, который заказывает товары (отправляет в бд), и иногда, при неизвестных мне условиях, запрос не проходит (примерно 1 из 20-ти), хотя все переменные не пустые.
Никаких оповещений об ошибке mysql.
Я сделал проверку, после заказа проверяет, есть ли он в бд, если нет, то выводится информация в текстовый документ.

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

Это я накосячил, или проблемы с хостингом? Хостинг довольно часто глючит в других направлениях, скоро сменим.

Привёл тот самый код, который заказывает товар.

Это создаются переменные:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
$values = $_POST['values'];

$user = $values['user'];
$name = $values['name'];
$surname = $values['surname'];
$email = $values['email'];
$phone = $values['phone'];
$passid = $values['passid'];
$personalid = $values['personalid'];
$address = $values['address'];
$product_url = $values['productUrl'];

$price = preg_replace('|[^0-9.,]*|','',$values['price']);
$price = str_replace(',','.',$price);

$tracing = $values['tracing'];
$product_description = $values['productDescription'];
$price_by_kg = 10;
$order_id = $_POST['order_id'];

$change_order_owner = false;
$unique_order = true;

//Определение переменной $send_time
$result = mysql_query("SELECT `send_time` FROM `send_time`");
$data = mysql_fetch_array($result);
$send_time = $data['send_time'];

//Определение переменной $shipping и $user_id
$result = mysql_query("SELECT `shipping`, `internalKey` FROM `modx_user_attributes` WHERE name='$user'", $db);
$data = mysql_fetch_array($result);

if($data['shipping']){
    $shipping = $data['shipping'];
}else{
    $shipping = '';
}

//Определение переменной $user_id
$user_id = $data['internalKey'];

//Дата заказа
$order_date = date('Y-m-d');



это сама функция:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
function make_order($user, 
                    $user_id, 
                    $name, 
                    $surname, 
                    $email, 
                    $phone, 
                    $passid, 
                    $personalid, 
                    $address, 
                    $product_url, 
                    $product_description,
                    $price, 
                    $tracing,
                    $shipping, 
                    $order_date,
                    $price_by_kg,
                    $send_time){
            mysql_query("INSERT INTO 
                `modx_make_order` 
                    ( `order_maked`, 
                    `user_id`, 
                    `surname`, 
                    `email`, 
                    `phone`, 
                    `passid`, 
                    `personalid`, 
                    `address`, 
                    `product_url`, 
                    `product_description`,
                    `price`, 
                    `tracing`, 
                    `shipping`, 
                    `order_date`, 
                    `price_by_kg`,
                    `sent_time`)
              VALUES 
                    ('$user',
                    '$user_id', 
                    '$name', 
                    '$email', 
                    '$phone', 
                    '$passid', 
                    '$personalid', 
                    '$address', 
                    '$product_url', 
                    '$product_description',
                    '$price', 
                    '$tracing',
                    '$shipping', 
                    '$order_date',
                    '$price_by_kg',
                    '$send_time')
            ");



Спасибо заранее
...
Рейтинг: 0 / 0
08.05.2014, 18:08
    #38637120
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) Иногда не отправляются запросы в бд mysql
дебажить ситуацию

1)строка которая отправлялась...результат мейк_ордер()
2)есть функции определения последней ошибки к базе данных
3)если в базе нету того что вставили в неё, в лог бросай 1,2

4)если нету, попробовать сделать тоже самое повторно
5)если вышло влог - второе вышло, иначе не вышло
6)если 4 не вышло, сделать тестово табличку где одно поле, автоинкремент и числовое) и сделать вставку туда... просто убедиться что вообще работает..тоесть сделать настолько элементарное действие но того же типа(инсерт) в другую таблицу и посмотреть что будет

результат в лог

7)если 6 не вышло, попробовать выполнить селект простейший, что будет посмотреть.

ЗЫ
у меня счас аналогично с CURL - в одном из 200-250 случаев, он не передаёт файл методом пост на другой сервер. выдаёт ошибку чтения файла, но не моего а крякозяблики. подобным алгоритмом выше, узнал, что в это время уже ни одна попытка передавать файл не будет удачной, как и любой пост запрос уэтого скрипта, ни через секунду, ни через 10 минут ожидания. а вот гетом получить удалёный файл может.
...
Рейтинг: 0 / 0
09.05.2014, 12:45
    #38637389
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) Иногда не отправляются запросы в бд mysql
Dobry_cat,

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

не видим мы также код подключения к базе (mysql_connect). Не видим присутствует ли обработка ошибок подключения . А ещё, mysql расширение признано устаревшим, потому надо бы использовать mysqli например (код менять надо будет по минимуму... чаще просто буковку i в названии функций доставить).
...
Рейтинг: 0 / 0
12.05.2014, 11:54
    #38638539
Dobry_cat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) Иногда не отправляются запросы в бд mysql
alex564657498765453, Програмёр, Спасибо за ответы

Всего в базе данных 70 таблиц, в которых 8322 записи

Вот структура таблицы, куда идут закакзы, там сейчас примерно 3400 записей
Кроме INSERT, реже используется UPDATE, и очень редко DELETE
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
CREATE TABLE IF NOT EXISTS `modx_make_order` (
  `order_id` int(10) NOT NULL AUTO_INCREMENT,
  `user_id` int(10) NOT NULL,
  `order_maked` varchar(255) NOT NULL,
  `name` varchar(255) NOT NULL,
  `surname` varchar(255) NOT NULL,
  `sursurname` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `phone` varchar(255) NOT NULL,
  `passid` varchar(255) NOT NULL,
  `personalid` varchar(255) NOT NULL,
  `address` varchar(255) NOT NULL,
  `product_url` varchar(255) NOT NULL,
  `tracing` varchar(255) NOT NULL,
  `product_description` text NOT NULL,
  `products_count` int(10) NOT NULL,
  `price` varchar(10) NOT NULL,
  `price_by_kg` int(9) NOT NULL,
  `length` int(9) NOT NULL,
  `width` int(9) NOT NULL,
  `height` int(9) NOT NULL,
  `custom_price` int(9) NOT NULL,
  `invoice` int(9) NOT NULL,
  `usa` varchar(5) NOT NULL,
  `in_way` varchar(9) NOT NULL,
  `location` varchar(255) NOT NULL,
  `sent_time` date NOT NULL,
  `weight` varchar(10) NOT NULL,
  `repack` varchar(9) NOT NULL,
  `paid` varchar(5) NOT NULL,
  `shipping` varchar(5) NOT NULL,
  `order_date` varchar(25) NOT NULL,
  `arrived` varchar(5) NOT NULL,
  `archived` varchar(5) NOT NULL,
  `admin` varchar(9) NOT NULL,
  `in_draft` varchar(9) NOT NULL,
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4894 ;



По вашему совету сменил всё с mysql на mysqli, а также оставил вывод ошибок на подключении, досих пор ошибок подклюсения нет. Только недошедшие до бд заказы

вот код подключения к бд:

Код: php
1.
2.
3.
4.
5.
6.
7.
if(!$db){
    $db = mysqli_connect("localhost", "user", "password") or error_logs('Ошибка подключения') and die();
    mysqli_select_db($db, "database") or error_logs('Ошибка подключения') and die();
    
    mysqli_query($db, "SET NAMES 'utf8' COLLATE 'utf8_general_ci'"); 
    mysqli_query($db, "SET CHARACTER SET 'utf8'");
}



Програмёрданные, не попавшие в базу не известны
Все переменные, которые создаются в коде, приведённом в первомпосте есть(не пустые), в логе они отмечаются, но в базу данных не проходят.
Причём я сделал, что если запрос не проходит в первый раз, то запускается второй, но 2 раза подряд ничего в бд не проходит. Ещё напомню, такое бывает примерно в 1 из 20-ти INSERT-ов.

Програмёрлоги mysql и php не представлены
Чесно говоря, я не знаю где их смотреть, подскажите пожалуйста.
...
Рейтинг: 0 / 0
12.05.2014, 13:17
    #38638667
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) Иногда не отправляются запросы в бд mysql
Dobry_cat,

А что тогда значило "Никаких оповещений об ошибке mysql"? Я думал речь идёт о логах.

у меня логи ошибок mysql лежат /var/log/mysql/error.log

ИЛИ

все mysqli_query надо обернуть таким образом:
Код: php
1.
2.
3.
if (!mysqli_query($link, "SET a=1")) {
    printf("Errormessage: %s\n", mysqli_error($link));
}



вместо printf делаем запись в свои "местные" логи))
...
Рейтинг: 0 / 0
12.05.2014, 15:27
    #38638878
Dobry_cat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) Иногда не отправляются запросы в бд mysql
ПрограмёрА что тогда значило "Никаких оповещений об ошибке mysql"? Я думал речь идёт о логах.


Извиняюсь, не сразу понял
При каждой ошибке отправляются данные в функцию, которая записывает в txt файл, в том числе и mysqli_error()
вот она:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
error_logs("user_id=".$user_id."
            user=".$user."		
            name=".$name."
            surname=".$surname."	
            email=".$email."	
            phone=".$phone."	
            passid=".$passid."	
            personalid=".$personalid."
            address=".$address."
            product_url=".$product_url."
            product_description=".$product_description."
            price=".$price."
            tracing=".$tracing."	
            shipping=".$shipping."	
            order_date=".$order_date."	
            price_by_kg=".$price_by_kg."	
            send_time=".$send_time."
            Две попытки заказать, но не появляется в базе
            ".mysqli_error($db));



Вот пример вывода ошибки в лог, все переменные передаются, иксами отмечены личные данные:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
[2014-05-12 08:05:56]: in /templates/php/make_order.php{
    Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36
    user_id=451
    user=xxxxxxxx		
    name=xxxxxxxx
    surname=xxxxxxxx	
    email=n.xxxxxxxx@gmail.com	
    phone=+xxxxxxxx	
    passid=xxxxxxxx	
    personalid=xxxxxxxx
    address=ул. xxxxxxxx 110
    product_url=http://xxxxxxxx
    product_description=Chehol dlya sotki
    price=1
    tracing=xxxxxxxx	
    shipping=	
    order_date=2014-05-12	
    price_by_kg=10	
    send_time=2014-05-15		
    Две попытки заказать, но не появляется в базе
...
Рейтинг: 0 / 0
12.05.2014, 15:30
    #38638879
Dobry_cat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) Иногда не отправляются запросы в бд mysql
Програмёр
все mysqli_query надо обернуть таким образом:
Код: php
1.
2.
3.
if (!mysqli_query($link, "SET a=1")) {
    printf("Errormessage: %s\n", mysqli_error($link));
}



вместо printf делаем запись в свои "местные" логи))

Спасибо, так попробую сделать
...
Рейтинг: 0 / 0
27.05.2014, 19:48
    #38653834
Dobry_cat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) Иногда не отправляются запросы в бд mysql
Програмёр, сделал, как вы посоветовали, вот что в логах выходит:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
[2014-05-27 15:05:30]: in /templates/php/make_order.php{
	Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
	user_id=457
        user=Daniil		
        name=daniil
        surname=хххххх
        email=хххххх	
        phone=хххххххххххх	
        passid=ххххххххххх	
        personalid=хххххххххх
        address=хххххххххххххх
        product_url=хххххх
        product_description=1.BuckWear-My Food On Your Food-Front/Black Print Adult T-Shirt,Medium
2.BuckWear-My Food On Your Food-Front/Black Print Adult T-Shirt,large
3.Zoo York Men'[color=red]s Specials Short Sleeve Tee, Black, Medium[/color]
        price=[color=red]47.48[/color]
        tracing=Tracking #:1Z602E9V0323689019	
        shipping=	
        order_date=2014-05-27	
        price_by_kg=10	
        send_time=2014-05-29
        Проверка в самой функции
        You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Specials Short Sleeve Tee, Black, Medium',
							'47.48', 
							'Tracking' at line 31
}



Места, на которое ругается выделены красным
Вот 31 строка функции отправки заказа, которую я выложил в первом посте.
Код: php
1.
$product_url = $values['productUrl'];


Это текстовая переменная, в ней хранится url сайта, с которого заказали товар, не знаю, при чём тут она...

И к тому же, об этой проблеме я узнал со слов посетителей сайта, но недавно я самостоятельно столкнулся с ней, примерно минут десять я пробовал отправить заказ, выходило сообщение сайта, что возникла ошибка, и вдруг опять заработало.
Я так понял, это случается периодами.

В чём ошибка до сих пор не пойму
...
Рейтинг: 0 / 0
27.05.2014, 20:15
    #38653844
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) Иногда не отправляются запросы в бд mysql
Dobry_catПрограмёр, сделал, как вы посоветовали, вот что в логах выходит:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
[2014-05-27 15:05:30]: in /templates/php/make_order.php{
	Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
	user_id=457
        user=Daniil		
        name=daniil
        surname=хххххх
        email=хххххх	
        phone=хххххххххххх	
        passid=ххххххххххх	
        personalid=хххххххххх
        address=хххххххххххххх
        product_url=хххххх
        product_description=1.BuckWear-My Food On Your Food-Front/Black Print Adult T-Shirt,Medium
2.BuckWear-My Food On Your Food-Front/Black Print Adult T-Shirt,large
3.Zoo York Men'[color=red]s Specials Short Sleeve Tee, Black, Medium[/color]
        price=[color=red]47.48[/color]
        tracing=Tracking #:1Z602E9V0323689019	
        shipping=	
        order_date=2014-05-27	
        price_by_kg=10	
        send_time=2014-05-29
        Проверка в самой функции
        You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Specials Short Sleeve Tee, Black, Medium',
							'47.48', 
							'Tracking' at line 31
}



Места, на которое ругается выделены красным
Вот 31 строка функции отправки заказа, которую я выложил в первом посте.
Код: php
1.
$product_url = $values['productUrl'];


Это текстовая переменная, в ней хранится url сайта, с которого заказали товар, не знаю, при чём тут она...

И к тому же, об этой проблеме я узнал со слов посетителей сайта, но недавно я самостоятельно столкнулся с ней, примерно минут десять я пробовал отправить заказ, выходило сообщение сайта, что возникла ошибка, и вдруг опять заработало.
Я так понял, это случается периодами.

В чём ошибка до сих пор не пойму

мдя, врядли ктото будет парсить глазами твою редакцию сообщений про ошибки

дальнейший шаг, вывести в лог нормально точную скл строку которую отправляет на сервер, и попытаться на сервере базданных через какойто клиент выполнить эту строку...держку пари ошибка будет таже самая(а ругаеться оно на 31 строчки СКЛ кода а не пхп)

ну и дальше ....можешь внимательно смотреть на код
...
Рейтинг: 0 / 0
27.05.2014, 20:25
    #38653850
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) Иногда не отправляются запросы в бд mysql
блиин чувак... во ты гонишь...

тебя не смутило почему оно ругаеться на часть строкового значения

значение
Код: php
1.
2.
3.
product_description=1.BuckWear-My Food On Your Food-Front/Black Print Adult T-Shirt,Medium
2.BuckWear-My Food On Your Food-Front/Black Print Adult T-Shirt,large
3.Zoo York Men's Specials Short Sleeve Tee, Black, Medium



а ругаеться на
Код: php
1.
s Specials Short Sleeve Tee, Black, Medium



, не никапли не засмущало? :)

ЗЫ
вообще совет выше возьми на заметку, не работает код в базу, в лог запрос(скл код итоговый), и в клиенте базы начинаешь разбирать что не так.

в даном случае тебе бы сразу подсветка синтаксиса указала ошибку.

ЗЫЗЫ

когда узришь, то mysqli::real_escape_string() . и не только ради выполнения этого запроса, а
и ради противодействия sql-иньекциям
...
Рейтинг: 0 / 0
27.05.2014, 20:26
    #38653851
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) Иногда не отправляются запросы в бд mysql
оооо блин, даже месная подсветка кода сразу выдит проблемное место
...
Рейтинг: 0 / 0
28.05.2014, 19:11
    #38654950
Dobry_cat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP) Иногда не отправляются запросы в бд mysql
авторкогда узришь, то mysqli::real_escape_string() . и не только ради выполнения этого запроса, а
alex564657498765453, спасибо за подсказку, всё нормально работает теперь, никаких ошибок!
Я и в правду не знал про mysqli::real_escape_string()
автормдя, врядли ктото будет парсить глазами твою редакцию сообщений про ошибки
А всё таки вы пропарсили, и не зря )))
Спасибо большое Програмёр и alex564657498765453б что отозвались!
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) Иногда не отправляются запросы в бд mysql / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]