За последние 24 часа нас посетили 15485 программистов и 1606 роботов. Сейчас ищут 925 программистов ...

Магия с бд Mysqli

Тема в разделе "PHP для новичков", создана пользователем energy455, 8 мар 2015.

  1. energy455

    energy455 Новичок

    С нами с:
    30 янв 2015
    Сообщения:
    122
    Симпатии:
    0
    Получилась такая интересная ситуация, вот код -
    Код (PHP):
    1.     $result = mysqli_query($mysqli, "SELECT id FROM b_proxy WHERE key = ".$key."");
    2.     $row = mysqli_fetch_assoc($result);
    3.  
    и есть бд, в ней есть 3 таблицы, мне нужна b_proxy, но когда использую таблицу b_proxy , то выводит ошибку, что mysqli_fetch_assoc - ожидает 1 парметр, а если использую остальные 2 таблицы,то все просто замечательно)
    Вот бд -
    [​IMG]
    [​IMG]

    Вот) Структура одинаковая, помогите пожалуйста)
    [​IMG]
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Без полного текста ошибка мало кто решит разбираться в твоём коде
     
  3. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Предположу что кавычек нет:)
    В лотерею сыграть что ли...
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    перед $row = mysqli_fetch_assoc($result);
    поставь var_dump($result);
     
  5. energy455

    energy455 Новичок

    С нами с:
    30 янв 2015
    Сообщения:
    122
    Симпатии:
    0
    bool(false)

    Каких ковычек?
    пишу так все работет -
    Код (PHP):
    1. $result = mysqli_query($mysqli, "SELECT id FROM men WHERE rost = ".$key."");
    2.         $row = mysqli_fetch_assoc($result);
    3.  
    а так нет
    Код (PHP):
    1.     $result = mysqli_query($mysqli, "SELECT id FROM b_proxy WHERE key = ".$key."");
    2.     $row = mysqli_fetch_assoc($result);
    3.  
     
  6. maxmuha

    maxmuha Новичок

    С нами с:
    11 янв 2015
    Сообщения:
    107
    Симпатии:
    0
    Адрес:
    Мурманск
    Каких ковычек?
    пишу так все работет -
    Код (PHP):
    1. $result = mysqli_query($mysqli, "SELECT id FROM men WHERE rost = '$key'");
    2.         $row = mysqli_fetch_assoc($result);
    3.  
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    mysqli_query вернула false, по документации это означает что произошла ошибка, есть функции которые могут о них сообщить, почитай.
    https://php.net/manual/ru/mysqli.error.php

    ты передал boolean в mysqli_fetch_assoc вместо ресурса который по документации ожидает mysqli_fetch_assoc.
    так что тебе учить основы опять нужно
     
  8. energy455

    energy455 Новичок

    С нами с:
    30 янв 2015
    Сообщения:
    122
    Симпатии:
    0
    вывело - Errormessage: Unknown system variable 'a'
    либо я не понял как сделать.
    А почему код с другой таблицей работает нормально? хотя они идентичны
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    energy455 ты что-то делаешь на столько не правильно, что даже не можешь показать полный текст ошибки, по которому обычно можно узнать её причину.
    Но если включить логику и посмотреть документацию по mysqli_query, то мы увидим примеры как пользоваться функцией и обрабатывать ошибки если они происходят.
    Хотя возможно проблема в другом, ты же не пишешь полный текст ошибки.
    Вот почитай как делать отладку http://phpfaq.ru/debug
     
  10. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Хз что ты передаешь но раз тип поля varchar значит база ожидает строку, строка должна быть в кавычках.

    Хз как ты пишешь, но предположу копируешь и не думаешь
    https://php.net/manual/ru/mysqli.error.php

    Добавлено спустя 1 минуту 9 секунд:
    нормально скопируй:)
     
  11. energy455

    energy455 Новичок

    С нами с:
    30 янв 2015
    Сообщения:
    122
    Симпатии:
    0
    Ребят сорри, вот ошибка-
    Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in
     
  12. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    mysqli_error что показывает, нам ошибка mysql а не php нужна:)
    кавычки пробовал? Там больше не в чем ошибиться:)
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Уже ближе, но нужно ещё полнее!
    Что я и угадывал, ты передал в mysqli_fetch_assoc первым параметром переменную с типом boolean, а по документации функция ожидает resource от mysqli_result, а mysqli_result вернула boolean false так как произошла ошибка при выполнении mysqli_result.
    Посмотреть что за ошибка можно посмотреть через https://php.net/manual/ru/mysqli.error.php
     
  14. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    key у тебя цифры или буквы?
     
  15. energy455

    energy455 Новичок

    С нами с:
    30 янв 2015
    Сообщения:
    122
    Симпатии:
    0
    вот еще ошибка
    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 'key = 157' at line 1

    key- может быть таким - "1545dsadF545", и цифры и буквы
     
  16. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Сделай echo "SELECT id FROM b_proxy WHERE key = ".$key."";
    Я предположу, что ошибка из-за того, что ты не обрамил значение key в кавычки, вот так: `key` = '1545dsadF545'
     
  17. energy455

    energy455 Новичок

    С нами с:
    30 янв 2015
    Сообщения:
    122
    Симпатии:
    0
    SELECT id FROM b_proxy WHERE key = 765

    я получаю key с формы методом пост.
     
  18. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  19. energy455

    energy455 Новичок

    С нами с:
    30 янв 2015
    Сообщения:
    122
    Симпатии:
    0
    вот так я фильтрую -
    Код (PHP):
    1. $key = htmlspecialchars($_POST['key']) & strip_tags($_POST['key']); 
    может тут ошибка?
     
  20. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Это не "Магия с бд Mysqli", а глюк в мозгах разраба ;) . Бывает...
    (кстати, бд "Mysqli" не существует)

    ошибка здесь: "SELECT id FROM b_proxy WHERE key = ".$key.""
    "SELECT id FROM b_proxy WHERE key = ".'бла-бла-бла'."" == 'SELECT id FROM b_proxy WHERE key = бла-бла-бла';
    надеюсь, сами догадаетесь в чём ошибка ;)
     
  21. maxmuha

    maxmuha Новичок

    С нами с:
    11 янв 2015
    Сообщения:
    107
    Симпатии:
    0
    Адрес:
    Мурманск
    Выше написал. Видимо читает невнимательно.
    Как и пишет...
     
  22. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    energy455 ну фильтруй, а уязвимость остаётся.
    Сравни два этих запроса

    твой SELECT id FROM b_proxy WHERE key = 765
    как надо SELECT `id` FROM `b_proxy` WHERE `key` = '765' и ещё 765 обработать mysqli_real_escape_string
     
  23. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    "Чукча не читатель - Чукча писатель" (с) народная мудрость :D
    Бывает, клинит. Каждый из нас изредка страдает. Главное чтобы до хронического не доросло.
     
  24. energy455

    energy455 Новичок

    С нами с:
    30 янв 2015
    Сообщения:
    122
    Симпатии:
    0
    экранировал перменую кей, сделал так -
    Код (PHP):
    1. $result = mysqli_query($mysqli, 'SELECT id FROM b_proxy WHERE key = ".'$key'." ');
    Теперь ошибка - Parse error: syntax error, unexpected T_VARIABLE )
     
  25. maxmuha

    maxmuha Новичок

    С нами с:
    11 янв 2015
    Сообщения:
    107
    Симпатии:
    0
    Адрес:
    Мурманск
    "SELECT id FROM b_proxy WHERE key = '$key' "