За последние 24 часа нас посетили 68418 программистов и 5389 роботов. Сейчас ищут 1509 программистов ...

Mysql обрезает запрос

Тема в разделе "PHP для новичков", создана пользователем Explorer, 4 май 2017.

Метки:
  1. Explorer

    Explorer Новичок

    С нами с:
    17 апр 2017
    Сообщения:
    17
    Симпатии:
    0
    Выполняю запрос из PHP:
    SELECT * FROM 315 WHERE catgroup = 'Рисунок' and pgroup = 'Дизель генерaтор'
    Происходит обрезание его до:
    SELECT * FROM 315 WHERE catgroup = 'Рисунок' and pgroup = 'Дизель генерaто'

    Меняю на:
    SELECT * FROM 315 WHERE catgroup = 'Рисунок 1-10' and pgroup = 'Дизель генерaтор ДГА-315'
    Происходит обрезание его до:
    SELECT * FROM 315 WHERE catgroup = 'Рисунок 1-10' and pgroup = 'Дизель генер'

    Mysql включает ограничение по длине запроса в 78 символов? В других формах такого не было, там запросы куда длиннее.
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.012
    Симпатии:
    1.679
    Адрес:
    :сердА
    1) Вбейте запрос руками в БД. Все будет работать без проблем, сдается мне.
    2) Код, которым отправляете запрос, в студию.
    3)
    В рамках этого же проекта?
    --- Добавлено ---
    И да. Уверены, что у вас в конфиге таблицы не задано ограничение длины поля? :)
     
  3. Explorer

    Explorer Новичок

    С нами с:
    17 апр 2017
    Сообщения:
    17
    Симпатии:
    0
    Да проект тот же. Таблица скопирована с аналогичной, которая работает. Сам код php работает здесь http://zda.spb.ru/cat/3645.php
    эта страница http://zda.spb.ru/cat/315.php почти полная копия (за исключением одного столбца)
    Код (Text):
    1. <head>
    2. <script type="text/javascript" src="script.js"></script>
    3. <title>Таблица</title>
    4.  
    5. <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    6.  
    7. </head>
    8.  
    9. <SCRIPT LANGUAGE="JavaScript">
    10. <!--
    11. function new_window()
    12. { window.open('ndex.php','newwin','top=15, left=20, menubar=0, toolbar=0, location=0, directories=0, status=0, scrollbars=1, resizable=0, width=400, height=600'); }
    13. // -->
    14. </SCRIPT>
    15.  
    16. <table width="100%">
    17. <tr>
    18.  
    19. <?php include('ddb.php'); ?>
    20. <?php include('cme.php'); ?>
    21.  
    22. <?php
    23. $tir0 = $_GET['ddb'];
    24. $tir1 = $_GET['img'];
    25. $tir2 = $_GET['imh'];
    26.  
    27. if (!empty($tir0)) {} else {$tir0 = "315";}
    28. if (!empty($tir1)) {} else {$tir1 = "Дизель-генерaтор ДГА-315";}
    29. if (!empty($tir2)) {} else {$tir2 = "Рисунок 1-10";}
    30.  
    31. include "config.php";
    32.  
    33. mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
    34. mysql_select_db($dbName) or die(mysql_error());
    35.  
    36. mysql_query ("set_client='utf8'");
    37. mysql_query ("set character_set_results='utf8'");
    38. mysql_query ("set collation_connection='utf8_general_ci'");
    39. mysql_query ("SET NAMES utf8");
    40.  
    41. $ath = mysql_query("SELECT * FROM $tir0 WHERE catgroup = '$tir2' and pgroup = '$tir1' ");
    42. if($ath)
    43.     {
    44. ?>
    45. <td id="logo0" width="100%"><b>&nbsp;&nbsp;&nbsp;<? echo $tir2; ?>&nbsp; - &nbsp;<? echo $tir1; ?></b></td>
    46. </tr>
    47.       </table>
    48.       <table border=0>
    49.     <tr><td valign="top" width="450px"><table>
    50.     <tr>
    51.     <td id="logo2" width="25px">id</td>
    52.     <td id="logo2" width="25px">N рис.</td>
    53.     <td id="logo2" width="25px">На рис.</td>
    54.     <td id="logo2" width="100px">Наименование</td>
    55.     <td id="logo2" width="100px">Обозначение</td>
    56.     <td id="logo2">К-во ДГА315</td>
    57.     <td id="logo2">К-во ДГА500</td>
    58.     </tr>
    59. <?
    60.     while($author = mysql_fetch_array($ath))
    61.     {
    62.      if ($author['pgroup'] == $tir1 ) { $iurl = $author['imgurl']; }
    63. ?>    <tr>
    64.     <td id="logo1" width="25px"><a href="dex315.php?ddb=<? echo $tir0; ?>&ik=<? echo $author['id']; ?>"><? echo $author['id']; ?></a></td>
    65.     <td id="logo1"><? if ($author['cntpic'] == "0" ) {echo "*";} else {echo $author['cntpic'];} ?></td>
    66.     <td id="logo1"><? if ($author['onpic'] == "0" ) {echo "*";} else {echo $author['onpic'];} ?></td>
    67.     <td id="logo1"><? echo $author['pname']; echo "<br>"; ?></td>
    68.     <td id="logo1" >
    69.     <? if (!empty($author['catnum'])) {echo $author['catnum']; echo "<br>";} ?>
    70.     <? if (!empty($author['catnum1'])) {echo $author['catnum1']; echo "<br>";} ?>
    71.     <? if (!empty($author['catnum2'])) {echo $author['catnum2']; echo "<br>";} ?>
    72.     </td>
    73.  
    74.     <td id="logo1"><? if ($author['cnt315'] == "0" ) {echo "*";} else {echo $author['cnt315'];} ?></td>
    75.     <td id="logo1"><? if ($author['cnt500'] == "0" ) {echo "*";} else {echo $author['cnt500'];} ?></td>
    76.  
    77.         <? $pg = $author['pgroup'];
    78.            $kg = $author['catgroup'];
    79.            $iu = $author['imgurl'];   ?>
    80.       </tr>
    81.  
    82. <?
    83.       }
    84. ?>
    85. <tr><td id="logo0" width="100px">&nbsp; <a href="dez315.php?ddb=<? echo $tir0; ?>&pg=<? echo $pg; ?>&kg=<? echo $kg; ?>&iu=<? echo $iu; ?>" id="pull" target ="new">Доб</a> &nbsp;</td></tr>
    86.       </table></td><td  valign="top"><table valign="top">
    87.     <img src="<?=$iurl?>" width="100%" alt="" >
    88.       </table></td></tr></table>
    89.  
    90.  
    91.  
    92. <?
    93.     }
    94.  
    95.     else
    96.     {
    97.       echo "<p><b>Error: ".mysql_error()."</b><p>";
    98.       exit();
    99.     }
    100. ?>
    Сам запрос
    Код (Text):
    1. SELECT * FROM 315 WHERE catgroup = 'Рисунок 1-10' and pgroup = 'Дизель генератор'
    через phpmyadmin тоже выдает ошибку #1064 -
     
  4. Explorer

    Explorer Новичок

    С нами с:
    17 апр 2017
    Сообщения:
    17
    Симпатии:
    0
    Спасибо, разобрался. Не понял в чем дело, точно не в коде. Удалил таблицу 315 и создал 315x не копированием, а вручную заново. Всё заработало.
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.012
    Симпатии:
    1.679
    Адрес:
    :сердА
    Хорошо. И вот вам ряд советов:

    Для начала, не используйте mysql_ расширение. Переходите на mysqli_. Дело в том, что mysql_ давно устарел, а из свежих версий php вообще выпилен. Он имеет проблемы с безопасностью и костыльной работой с БД. mysqli_ лучше, гибче, умеет в подготовленные запросы и работает напрямую с БД через mysqlnd-адаптер. Это все оч оч оч хорошо.

    Далее. Имена полей возьмите в обратный кавычки. Не апострофы, а `. Это те, которые над буквой "Ё" на клавиатуре. Если имена полей пересекутся со служебными словами mysql, это защитит от ошибки.

    Третье. Не делайте die() с выводом ошибки пользователю. И вообще не выбрасывайте ошибки базы на экран. Ему это не нужно, а злоумышленнику подсказка. Пишите ошибки в лог, а не на страницу.

    Четвертое. Не используйте в запросах данные, взятые непосредственно из того, что отдал клиент. Это брешь в безопасности, у вас возможна sql-инъекция. Данные должны быть предварительно экранированы через функцию mysqli_real_escape_string(); Это очень важно.
     
    Explorer нравится это.
  6. Explorer

    Explorer Новичок

    С нами с:
    17 апр 2017
    Сообщения:
    17
    Симпатии:
    0
    Это временная форма (для меня) для заполнения каталога. Как заполню поставлю пароль пользовательский и удалю их с сайта.
    Нормальная примерно так будет http://zda.spb.ru/extcat/
    Единственное, я написал меню, которое проползает по базе и само себя составляет. Пока еще таблицы три это быстро, будет 35-40 думаю сильно оно замедлится?
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.012
    Симпатии:
    1.679
    Адрес:
    :сердА
    А зачем увеличивать количество таблиц? С чем это связано? Может, стоит пересмотреть структуру БД? Если отдельные таблицы отвечают за какой-нибудь там "тип чего-то там", то, может, имеет смысл хранить эти типы в одной таблице, а в другой хранить все в кучу, заведя колонку, которая будет ссылаться на таблицу с типами?
     
  8. Explorer

    Explorer Новичок

    С нами с:
    17 апр 2017
    Сообщения:
    17
    Симпатии:
    0
    У них разные поля. Это каталоги двигателей. Сходны только поля "наименование" и "обозначение", остальные в разных каталогах разные.
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.012
    Симпатии:
    1.679
    Адрес:
    :сердА
    А по этим разным полям будет вестись выборка? Если нет, то, может стоит их все схлопнуть в одно JSON-поле?
     
  10. Explorer

    Explorer Новичок

    С нами с:
    17 апр 2017
    Сообщения:
    17
    Симпатии:
    0
    Вот еще не знаю. Мне новые пожелания заказчик постоянно предоставляет. Поиск по ним наверняка будет нужен.
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.012
    Симпатии:
    1.679
    Адрес:
    :сердА
    Ну даже если так, последние версии MySQL умеют в выборки из JSON-полей. А это очень очень круто.
    --- Добавлено ---
    Как бд внутри бд
     
    Explorer нравится это.