Выполняю запрос из 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 символов? В других формах такого не было, там запросы куда длиннее.
1) Вбейте запрос руками в БД. Все будет работать без проблем, сдается мне. 2) Код, которым отправляете запрос, в студию. 3) В рамках этого же проекта? --- Добавлено --- И да. Уверены, что у вас в конфиге таблицы не задано ограничение длины поля?
Да проект тот же. Таблица скопирована с аналогичной, которая работает. Сам код php работает здесь http://zda.spb.ru/cat/3645.php эта страница http://zda.spb.ru/cat/315.php почти полная копия (за исключением одного столбца) Код (Text): <head> <script type="text/javascript" src="script.js"></script> <title>Таблица</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> </head> <SCRIPT LANGUAGE="JavaScript"> <!-- function new_window() { 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'); } // --> </SCRIPT> <table width="100%"> <tr> <?php include('ddb.php'); ?> <?php include('cme.php'); ?> <?php $tir0 = $_GET['ddb']; $tir1 = $_GET['img']; $tir2 = $_GET['imh']; if (!empty($tir0)) {} else {$tir0 = "315";} if (!empty($tir1)) {} else {$tir1 = "Дизель-генерaтор ДГА-315";} if (!empty($tir2)) {} else {$tir2 = "Рисунок 1-10";} include "config.php"; mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); mysql_select_db($dbName) or die(mysql_error()); mysql_query ("set_client='utf8'"); mysql_query ("set character_set_results='utf8'"); mysql_query ("set collation_connection='utf8_general_ci'"); mysql_query ("SET NAMES utf8"); $ath = mysql_query("SELECT * FROM $tir0 WHERE catgroup = '$tir2' and pgroup = '$tir1' "); if($ath) { ?> <td id="logo0" width="100%"><b> <? echo $tir2; ?> - <? echo $tir1; ?></b></td> </tr> </table> <table border=0> <tr><td valign="top" width="450px"><table> <tr> <td id="logo2" width="25px">id</td> <td id="logo2" width="25px">N рис.</td> <td id="logo2" width="25px">На рис.</td> <td id="logo2" width="100px">Наименование</td> <td id="logo2" width="100px">Обозначение</td> <td id="logo2">К-во ДГА315</td> <td id="logo2">К-во ДГА500</td> </tr> <? while($author = mysql_fetch_array($ath)) { if ($author['pgroup'] == $tir1 ) { $iurl = $author['imgurl']; } ?> <tr> <td id="logo1" width="25px"><a href="dex315.php?ddb=<? echo $tir0; ?>&ik=<? echo $author['id']; ?>"><? echo $author['id']; ?></a></td> <td id="logo1"><? if ($author['cntpic'] == "0" ) {echo "*";} else {echo $author['cntpic'];} ?></td> <td id="logo1"><? if ($author['onpic'] == "0" ) {echo "*";} else {echo $author['onpic'];} ?></td> <td id="logo1"><? echo $author['pname']; echo "<br>"; ?></td> <td id="logo1" > <? if (!empty($author['catnum'])) {echo $author['catnum']; echo "<br>";} ?> <? if (!empty($author['catnum1'])) {echo $author['catnum1']; echo "<br>";} ?> <? if (!empty($author['catnum2'])) {echo $author['catnum2']; echo "<br>";} ?> </td> <td id="logo1"><? if ($author['cnt315'] == "0" ) {echo "*";} else {echo $author['cnt315'];} ?></td> <td id="logo1"><? if ($author['cnt500'] == "0" ) {echo "*";} else {echo $author['cnt500'];} ?></td> <? $pg = $author['pgroup']; $kg = $author['catgroup']; $iu = $author['imgurl']; ?> </tr> <? } ?> <tr><td id="logo0" width="100px"> <a href="dez315.php?ddb=<? echo $tir0; ?>&pg=<? echo $pg; ?>&kg=<? echo $kg; ?>&iu=<? echo $iu; ?>" id="pull" target ="new">Доб</a> </td></tr> </table></td><td valign="top"><table valign="top"> <img src="<?=$iurl?>" width="100%" alt="" > </table></td></tr></table> <? } else { echo "<p><b>Error: ".mysql_error()."</b><p>"; exit(); } ?> Сам запрос Код (Text): SELECT * FROM 315 WHERE catgroup = 'Рисунок 1-10' and pgroup = 'Дизель генератор' через phpmyadmin тоже выдает ошибку #1064 -
Спасибо, разобрался. Не понял в чем дело, точно не в коде. Удалил таблицу 315 и создал 315x не копированием, а вручную заново. Всё заработало.
Хорошо. И вот вам ряд советов: Для начала, не используйте mysql_ расширение. Переходите на mysqli_. Дело в том, что mysql_ давно устарел, а из свежих версий php вообще выпилен. Он имеет проблемы с безопасностью и костыльной работой с БД. mysqli_ лучше, гибче, умеет в подготовленные запросы и работает напрямую с БД через mysqlnd-адаптер. Это все оч оч оч хорошо. Далее. Имена полей возьмите в обратный кавычки. Не апострофы, а `. Это те, которые над буквой "Ё" на клавиатуре. Если имена полей пересекутся со служебными словами mysql, это защитит от ошибки. Третье. Не делайте die() с выводом ошибки пользователю. И вообще не выбрасывайте ошибки базы на экран. Ему это не нужно, а злоумышленнику подсказка. Пишите ошибки в лог, а не на страницу. Четвертое. Не используйте в запросах данные, взятые непосредственно из того, что отдал клиент. Это брешь в безопасности, у вас возможна sql-инъекция. Данные должны быть предварительно экранированы через функцию mysqli_real_escape_string(); Это очень важно.
Это временная форма (для меня) для заполнения каталога. Как заполню поставлю пароль пользовательский и удалю их с сайта. Нормальная примерно так будет http://zda.spb.ru/extcat/ Единственное, я написал меню, которое проползает по базе и само себя составляет. Пока еще таблицы три это быстро, будет 35-40 думаю сильно оно замедлится?
А зачем увеличивать количество таблиц? С чем это связано? Может, стоит пересмотреть структуру БД? Если отдельные таблицы отвечают за какой-нибудь там "тип чего-то там", то, может, имеет смысл хранить эти типы в одной таблице, а в другой хранить все в кучу, заведя колонку, которая будет ссылаться на таблицу с типами?
У них разные поля. Это каталоги двигателей. Сходны только поля "наименование" и "обозначение", остальные в разных каталогах разные.
А по этим разным полям будет вестись выборка? Если нет, то, может стоит их все схлопнуть в одно JSON-поле?
Вот еще не знаю. Мне новые пожелания заказчик постоянно предоставляет. Поиск по ним наверняка будет нужен.
Ну даже если так, последние версии MySQL умеют в выборки из JSON-полей. А это очень очень круто. --- Добавлено --- Как бд внутри бд