Здравствуйте, никак не могу заставить работать сфинкс на минимальной конфигурации
Версия 3, конфиг взял из дистрибутива, стандартный файл, чтобы исключить косяки с неверными настройками
Конфиг-файл скрин
Код конфига
# Minimal Sphinx configuration sample (clean, simple, functional)
source src1
{
type = mysql
sql_host = localhost
sql_user = a0239779_a*****
sql_pass = r********
sql_db = a0239779_m****
sql_port = 3306 # optional, default is 3306
sql_query =
SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content
FROM documents
sql_attr_uint = group_id
sql_attr_timestamp = date_added
}
index test1
{
source = src1
path = /home/a0239779/sphinx/data/test1
}
index testrt
{
type = rt
rt_mem_limit = 128M
path = /home/a0239779/sphinx/data/testrt
rt_field = title
rt_field = content
rt_attr_uint = gid
}
indexer
{
mem_limit = 128M
}
searchd
{
listen = 9312
listen = 9306:mysql41
log = /home/a0239779/sphinx/log/searchd.log
query_log = /home/a0239779/sphinx/log/query.log
read_timeout = 5
max_children = 30
pid_file = /home/a0239779/sphinx/log/searchd.pid
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
workers = threads # for RT to work
binlog_path = /home/a0239779/sphinx/data
}
При старте вроде запускается
Скрин старта
[a0239779@jarl bin]$ ./sphinx.sh start
Sphinx 3.1.1 (commit 612d99f)
Copyright (c) 2001-2018, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file '/home/a0239779/sphinx/etc/sphinx.conf'...
listening on all interfaces, port=9312
listening on all interfaces, port=9306
precaching index 'test1'
WARNING: index 'test1': prealloc: failed to open /home/a0239779/sphinx/data/test1.sph:
No such file or directory; NOT SERVING
precaching index 'testrt'
precached 2 indexes in 0.001 sec
Индексация
Скрин индексации
[a0239779@jarl bin]$ indexer -c /home/a0239779/sphinx/etc/sphinx.conf --all
Sphinx 2.1.5-id64-release (rel21-r4508)
Copyright (c) 2001-2014, Andrew Aksyonoff
Copyright (c) 2008-2014, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file '/home/a0239779/sphinx/etc/sphinx.conf'...
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.010 sec, 19141 bytes/sec, 396.70 docs/sec
skipping non-plain index 'testrt'...
total 3 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
total 10 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
Проверка поиска search —config /home/a0239779/sphinx/etc/sphinx.conf ‘another’ Всё находит корректно.
Скрин поиска
[a0239779@jarl bin]$ search --config /home/a0239779/sphinx/etc/sphinx.conf 'another'
Sphinx 2.1.5-id64-release (rel21-r4508)
Copyright (c) 2001-2014, Andrew Aksyonoff
Copyright (c) 2008-2014, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file '/home/a0239779/sphinx/etc/sphinx.conf'...
index 'test1': query 'another ': returned 1 matches of 1 total in 0.000 sec
displaying matches:
1. document=3, weight=2769, group_id=2, date_added=Sat Nov 26 20:27:31 2022
words:
1. 'another': 1 documents, 2 hits
index 'testrt': search error: failed to open /home/a0239779/sphinx/data/testrt.sph:
No such file or directory.
Подключаюсь через mysql -h127.0.0.1 -P9306
Скрин mysql
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1
Server version: 3.1.1 (commit 612d99f)
Copyright (c) 2009-2022 Percona LLC and/or its affiliates
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql> SHOW TABLES;
+--------+------+
| Index | Type |
+--------+------+
| testrt | rt |
+--------+------+
1 row in set (0,00 sec)
Команда на показ таблиц. Ведь здесь должно быть 2 таблицы? Rt и test1 или нет? Показывает только Rt
Делаю запрос через консоль мускула. SELECT * FROM test1 WHERE MATCH(‘another’);
Не срабатывает. Как я понял не видит индексов test1
Скрин SELECT
mysql> SELECT * FROM test1 WHERE MATCH('another');
ERROR 1064 (42000): no enabled local indexes to search
Теперь через PHP на сервере, сделал несколько разных вариантов
1. Скрипт через PDO
Скрин PDO
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
$db=new PDO("mysql:host=127.0.0.1;port=9306;dbname=a0239779_m*;charset=utf8;","a0239779_*","r*",$options);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$stmt = $db->query("SELECT `id` FROM `test1` WHERE MATCH('another')");
$results = $stmt->fetchAll();
var_dump($results);
Подключение есть, порты указаны верные. Результат:
Скрин
Не видит индексов тест1
<b>Fatal error</b>: Uncaught PDOException: SQLSTATE[42000]:
Syntax error or access violation: 1064 no enabled local indexes to search in /home/a0239779/domains/m*:57
Stack trace:
#0 /home/a0239779/domains/m*/public_html/sp1.php(57): PDO->query('SELECT `id` FRO...')
Взял готовые скрипты из дистрибутива
Скрин
require ( "sphinxapi.php" );
$docs = array
(
"this is my test text to be highlighted,
and for the sake of the testing we need to pump its length somewhat",
"another test text to be highlighted, below limit",
"test number three, without phrase match",
"final test, not only without phrase match,
but also above limit and with swapped phrase text test as well",
);
$words = "another";
$index = "test1";
$opts = array
(
"before_match" => "<b>",
"after_match" => "</b>",
"chunk_separator" => " ... ",
"limit" => 60,
"around" => 3,
);
foreach ( array(0,1) as $exact )
{
$opts["exact_phrase"] = $exact;
print "exact_phrase=$exactn";
$cl = new SphinxClient ();
$res = $cl->BuildExcerpts ( $docs, $index, $words, $opts );
if ( !$res )
{
die ( "ERROR: " . $cl->GetLastError() . ".n" );
} else
{
$n = 0;
foreach ( $res as $entry )
{
$n++;
print "n=$n, res=$entryn";
}
print "n";
}
}
Результат:
Скрин
exact_phrase=0 ERROR: searchd error: unknown local index 'test1' in search request.
Также, нету индексов таблицы test1, а testrt есть
Не могу понять что не так, пробовал 3 разных версии сфинкса, менял порты, ничего не помогает
Describe the bug
Plain text index is created and stored successfully on disk. But when trying to use the index in a search query I get this error message:
ERROR 1064 (42000): unknown local index(es) 'products' in search request
To Reproduce
Steps to reproduce the behavior:
- Install
manticore
from installation guide on CentOS 8 - Install MariaDB-Client
- Set config file
source products {
type = mysql
sql_host = 192.168.20.63
sql_user = root
sql_pass = password
sql_db = dbname
sql_port = 3306
sql_query_pre = SET CHARACTER_SET_RESULTS=utf8
sql_query_pre = SET NAMES utf8
sql_query = SELECT product_id, (SELECT name FROM oc_manufacturer m WHERE m.manufacturer_id = p.manufacturer_id) brand, model, p.short_desc as short_desc, p.price as price , p.image as image, p.quantity as quantity, p.label FROM oc_product p WHERE p.status = 1
sql_attr_uint = product_id
sql_field_string = model
}
index products {
type = plain
source = products
path = idx_products
}
- Run indexer with following command:
sudo -u manticore indexer -c /etc/manticoresearch/my.conf --all
result:
using config file '/etc/manticoresearch/alld.conf'...
indexing index 'products'...
collected 51323 docs, 4.6 MB
creating lookup: 51.3 Kdocs, 100.0% done
creating histograms: 51.3 Kdocs, 100.0% done
sorted 0.9 Mhits, 100.0% done
total 51323 docs, 4616251 bytes
total 0.655 sec, 7038545 bytes/sec, 78253.81 docs/sec
total 35 reads, 0.003 sec, 248.2 kb/call avg, 0.1 msec/call avg
total 37 writes, 0.011 sec, 408.1 kb/call avg, 0.3 msec/call avg
Check index files are created:
ls /var/lib/manticore
-rw-r--r--. 1 manticore manticore 1042540 Jan 9 06:58 idx_products.spa
-rw-r--r--. 1 manticore manticore 1561079 Jan 9 06:58 idx_products.spb
-rw-r--r--. 1 manticore manticore 3624277 Jan 9 06:58 idx_products.spd
-rw-r--r--. 1 manticore manticore 76902 Jan 9 06:58 idx_products.spe
-rw-r--r--. 1 manticore manticore 490 Jan 9 06:58 idx_products.sph
-rw-r--r--. 1 manticore manticore 4208 Jan 9 06:58 idx_products.sphi
-rw-r--r--. 1 manticore manticore 685513 Jan 9 06:58 idx_products.spi
-rw-r--r--. 1 manticore manticore 6416 Jan 9 06:58 idx_products.spm
-rw-r--r--. 1 manticore manticore 462953 Jan 9 06:58 idx_products.spp
-rw-r--r--. 1 manticore manticore 268661 Jan 9 06:58 idx_products.spt
- Try to use index:
mysql -h0 -P9306
MySQL [(none)]> SELECT * FROM products WHERE MATCH('iphone');
ERROR 1064 (42000): unknown local index(es) 'products' in search request
Expected behavior
Find some search results based on query match.
Describe the environment:
- Manticore Search version
Manticore 3.5.4 f70faec5@210107 release
- OS version CentOS 8:
inux localhost.localdomain 4.18.0-147.el8.x86_64 <a href ="https://github.com/manticoresoftware/manticoresearch/issues/1">#1</a> SMP Wed Dec 4 21:51:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux`
**Messages from log files:**
No related message in logs.
**Additional context**
No additional context
Работаю с поисковым движком Sphinx (он же sphinxsearch). При SphinxQL-запросе Сфинкс выдаёт ошибку «ERROR 1064 (42000): no such filter attribute».
Разберёмся в природе этой проблемы. Для начала представлю свои данные.
Таблица:
[sql]
CREATE TABLE IF NOT EXISTS `organizations` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`description` text,
`address` varchar(255) NOT NULL,
`city_id` int(10) unsigned NOT NULL,
`cat_id` int(10) unsigned NOT NULL,
`url` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ix2` (`url`),
KEY `ix3` (`cat_id`),
KEY `ix4` (`city_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
[/sql]
Конфиг Sphinx для поиска по вышеописанной таблице:
source organizations { type = mysql sql_host = localhost sql_user = root sql_pass = root_pass sql_db = db_title sql_port = 3306 # optional, default is 3306 sql_query_pre = SET NAMES utf8 sql_query_pre = SET CHARACTER SET utf8 sql_query = SELECT * FROM `organizations` sql_attr_uint = id sql_query_info = SELECT * FROM organizations WHERE id=$id } index organizations { source = organizations path = /var/www/data/www/sphinx/data morphology = stem_ru min_word_len = 1 charset_type = utf-8 } indexer { mem_limit = 128M } searchd { listen = /var/www/data/www/sphinx/searchd.sock:mysql41 log = /var/www/data/www/sphinx/searchd.log pid_file = /var/www/data/www/sphinx/sphinx.pid }
Всё проиндексировал и запустил. Пишу к Сфинксу такой запрос на SphinxQL:
[sql]
SELECT * FROM organizations WHERE MATCH(‘some_org’) AND city_id = 10 ORDER BY id DESC LIMIT 10;
[/sql]
Sphinx (sphinxsearch) выдаёт ошибку:
ERROR 1064 (42000): index organizations: no such filter attribute 'city_id' sql_attr_uint = city_id
Что делать, как исправить, что бы работало как задумано в запросе?
Решение проблемы
Sphinx не может отбирать данные по тем атрибутам, которых он не знает. Поле city_id
используется в запросе как фильтр, но оно не задано в конфигурационном файле Sphinx как фильтр.
Атрибуты (столбцы таблицы), которые можно использовать в качестве фильтров надо указывать следующим образом в секции source:
sql_attr_uint = category_id sql_attr_timestamp = created_at sql_attr_float = cb_commission sql_attr_multi = uint cb_category from query; SELECT id, category_id FROM clickbank_category_bind
Т.е. по типу поля выбирается соответствующая директива конфигурации Sphinx.
Конкретно в моём случае в секцию source надо дописать:
sql_attr_uint = city_id
В конечном счёте вся секция будет выглядеть так:
source organizations { type = mysql sql_host = localhost sql_user = root sql_pass = root_pass sql_db = db_title sql_port = 3306 # optional, default is 3306 sql_query_pre = SET NAMES utf8 sql_query_pre = SET CHARACTER SET utf8 sql_query = SELECT * FROM `organizations` sql_attr_uint = id sql_attr_uint = city_id #дописан атрибут (столбец таблицы), который можно использовать в качестве фильтра sql_query_info = SELECT * FROM organizations WHERE id=$id }
После этого необходимо перестроить индекс Sphinx, т.е. запустить indexer с нужными параметрам передавая файл конфига. После этого запустить поисковый демон Сфинкса (searchd).
Oops!! Stuck with MySQL Error code 1064 SQL State 42000? We can help you in fixing it.
The SQL State Error 42000 occurs mainly due to the SQL syntax error or due to the outdated JDBC MySQL driver.
At Bobcares, we often get requests to fix MySQL errors, as a part of our Server Management Services.
Today, let’s see how our Support Engineers fix MySQL errors for our customers.
Why MySQL Error code 1064 SQL State 42000 occurs?
The MySQL Error code mainly occurs due to the SQL Syntax error. It happens when MySQL is unable to validate the commands.
The Syntax Error occurs due to many factors like mistyping the commands, deprecated or missing data from the database.
In some cases, the error occurs when the JDBC driver initializes the connection.
How we fix the MySQL Error code 1064?
Recently, one of our customers approached us saying that he is getting MySQL Error code 1064 SQL State 42000. On checking, we found an error in the SQL syntax.
Now, let’s see the main causes for this Error 1064 SQL State 42000 and how our Support Engineers fix them.
1. Using Reserved Words
The reserved words perform some specific functions within the MySQL engine.
Sometimes we receive the error while using the reserved words, The error occurs when the MySQL is not meeting the exact requirements for using the particular keyword.
Create Table alter (first name, last name);
The alter is a reserved word. To fix the error 1064 with the reserved word we specify the alter word within backticks.
Create Table 'alter' (first name, last name);
2. Outdated JDBC driver
When the JDBC driver initializes the connection, it sends several commands to the MySQL server. At that time we may receive the MySQL Error code SQL State 42000.
The problem is that the commands were deprecated for some time which results in the error.
We fix the error by upgrading the JDBC MySQL driver to the latest version.
3. Mistyping and Missing of Data
The 1064 error occurs when the data is not found in the database or mistyping the commands.
In case, if the data is missing from the database, we manually add the data to the database. Also, we make sure that all the commands are spelled correctly.
[Need any assistance with SQL State 42000 Error codes? – We’ll help you]
Conclusion
In short, today we discussed in detail on MySQL Error code 1064 and saw how our Support Engineers find the fix for this error.
PREVENT YOUR SERVER FROM CRASHING!
Never again lose customers to poor server speed! Let us help you.
Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.
GET STARTED
var google_conversion_label = «owonCMyG5nEQ0aD71QM»;
Содержание
- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- SQL error 1064 – что делать?
- NoSQL
- Использование зарезервированных слов
- Недостающая информация в таблице
- Интенсив по Виртуализации VMware vSphere 7
- Полезно?
- Почему?
- MySQL Error code 1064 SQL State 42000 – How To Fix?
- Why MySQL Error code 1064 SQL State 42000 occurs?
- How we fix the MySQL Error code 1064?
- 1. Using Reserved Words
- 2. Outdated JDBC driver
- 3. Mistyping and Missing of Data
- Conclusion
- PREVENT YOUR SERVER FROM CRASHING!
- 2 Comments
- MySQL error 1064
- 1. Запрос в редакторе.
- 2. Перенос базы на другой сервер.
- 3. Некорректная работа сайта.
- Форум пользователей MySQL
- #1 22.11.2010 05:31:00
- ERROR 1064 (42000) Я Полный чайник
- #2 22.11.2010 06:42:48
- Re: ERROR 1064 (42000) Я Полный чайник
- #3 23.11.2010 01:50:30
- Re: ERROR 1064 (42000) Я Полный чайник
- #4 23.11.2010 01:59:31
- Re: ERROR 1064 (42000) Я Полный чайник
- #5 23.11.2010 15:28:00
- Re: ERROR 1064 (42000) Я Полный чайник
ИТ База знаний
Курс по Asterisk
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
SQL error 1064 – что делать?
Вам когда-нибудь приходилось видеть ошибку 1064 при работе с MySQL? Причем она указывает на некие синтаксические ошибки в SQL запросе, и эти ошибки могут быть совсем неочевидны – подробнее расскажем ниже.
NoSQL
Научись создавать архитектуру хранения данных, управлять ею и автоматизировать рутинные процессы
Использование зарезервированных слов
У каждой версии MySQL есть свой список зарезервированных слов – эти слова используются для особых задач или особых функций внутри движка MySQL. При попытке использовать какие-то из них, вы получите ту самую ошибку 1064. К примеру, ниже пример SQL запроса, который использует зарезервированное слово в качестве имени таблицы.
Как этого избежать? Просто! Только потому что слово alter зарезервировано, это не значит, что его нельзя использовать – нужно просто по-особенному приготовить! Чтобы движок MySQL не воспринимал это слово как команду, мы будем просто использовать кавычки и оно взлетит:
Недостающая информация в таблице
Иногда какой-то части информации в таблице нет и это может вызвать эту ошибку, если запрос обращался к этим данным. К примеру, если в таблице был список сотрудников, и каждому был присвоен ID, было бы логично предположить, что запрос будет вызывать запись сотрудника вместе с номером ID, например:
Если пресловутый $id никогда не был правильно указан, запрос будет выглядеть для MySQL сервера следующим образом:
Т.к запрос по сути пустой, движок MySQL будет выдавать ту самую ошибку 1064. Исправляется это следующим образом – вам нужно каким-то образом вызвать конкретную запись и добавить недостающую информацию, причем сделать это не так просто: если пытаться вызвать запись по уникальному номеру, скорее всего вы увидите точно такую ошибку. Можно с помощью phpMyAdmin вручную выбрать необходимую строку и добавить нужную информацию.
Опечатки в командах
Одной из самых частых причин ошибки 1064 являются опечатки. И иногда можно десять раз посмотреть на команду и не увидеть опечатки – как пример ниже с командой UPDATE:
Соответственно, проверяйте команды свежим взглядом и старайтесь не пропускать такого. Правильный вариант будет выглядеть так:
Устаревшие команды
Некоторые команды устарели, и в новых версиях MySQL начинают выдавать хорошо знакомую нам ошибку. К примеру, команда ‘TYPE’ была признана устаревшей в MySQL 4.1 и была полностью удалена в MySQL 5.1, где при попытке использовать ее вы можете видеть ту самую ошибку. Вместо нее необходимо использовать команду ‘ENGINE’.
Ниже неверный вариант:
А вот правильный, модный и современный вариант (как оно должно быть, чтобы не было ошибки):
Заключение
Как можно видеть, для одной несчастной ошибки, указывающей на синтаксис, может быть целый ряд разных причин. Так что когда вы видите подобную ошибку – вспомните эту статью и проверьте все возможные варианты ?
Интенсив по Виртуализации VMware vSphere 7
Самое важное про виртуализацию и VMware vSphere 7 в 2-х часовом онлайн-интенсиве от тренера с 30-летним стажем. Для тех, кто начинает знакомство с виртуализацией и хочет быстро погрузиться в предметную область и решения на базе VMware
Полезно?
Почему?
😪 Мы тщательно прорабатываем каждый фидбек и отвечаем по итогам анализа. Напишите, пожалуйста, как мы сможем улучшить эту статью.
😍 Полезные IT – статьи от экспертов раз в неделю у вас в почте. Укажите свою дату рождения и мы не забудем поздравить вас.
Источник
MySQL Error code 1064 SQL State 42000 – How To Fix?
by Sharon Thomas | Jan 22, 2020
Oops!! Stuck with MySQL Error code 1064 SQL State 42000? We can help you in fixing it.
The SQL State Error 42000 occurs mainly due to the SQL syntax error or due to the outdated JDBC MySQL driver.
At Bobcares, we often get requests to fix MySQL errors, as a part of our Server Management Services.
Today, let’s see how our Support Engineers fix MySQL errors for our customers.
Why MySQL Error code 1064 SQL State 42000 occurs?
The MySQL Error code mainly occurs due to the SQL Syntax error. It happens when MySQL is unable to validate the commands.
The Syntax Error occurs due to many factors like mistyping the commands, deprecated or missing data from the database.
In some cases, the error occurs when the JDBC driver initializes the connection.
How we fix the MySQL Error code 1064?
Recently, one of our customers approached us saying that he is getting MySQL Error code 1064 SQL State 42000. On checking, we found an error in the SQL syntax.
Now, let’s see the main causes for this Error 1064 SQL State 42000 and how our Support Engineers fix them.
1. Using Reserved Words
The reserved words perform some specific functions within the MySQL engine.
Sometimes we receive the error while using the reserved words, The error occurs when the MySQL is not meeting the exact requirements for using the particular keyword.
The alter is a reserved word. To fix the error 1064 with the reserved word we specify the alter word within backticks.
2. Outdated JDBC driver
When the JDBC driver initializes the connection, it sends several commands to the MySQL server. At that time we may receive the MySQL Error code SQL State 42000.
The problem is that the commands were deprecated for some time which results in the error.
We fix the error by upgrading the JDBC MySQL driver to the latest version.
3. Mistyping and Missing of Data
The 1064 error occurs when the data is not found in the database or mistyping the commands.
In case, if the data is missing from the database, we manually add the data to the database. Also, we make sure that all the commands are spelled correctly.
[Need any assistance with SQL State 42000 Error codes? – We’ll help you]
Conclusion
In short, today we discussed in detail on MySQL Error code 1064 and saw how our Support Engineers find the fix for this error.
PREVENT YOUR SERVER FROM CRASHING!
Never again lose customers to poor server speed! Let us help you.
Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.
i have created this procedure on mySql
DELIMITER $$
CREATE PROCEDURE returnMSISDN (
out P_MSISDN int(9)
)
Begin
DECLARE finished INTEGER DEFAULT 0;
DECLARE V_msisdn int(9) DEFAULT 0;
DECLARE curMsisdn
CURSOR FOR
select Subscriber_ID from sdp_snapshot_toda where Service_Class_ID between 4000 and 4999;
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET finished = 1;
getMsisdn : LOOP
Fetch curMsisdn into V_msisdn;
IF finished = 1 THEN
LEAVE getMsisdn;
END IF;
END LOOP getMsisdn;
CLOSE curMsisdn;
END $$
DELIMITER ;
ERROR 1064 (42000): 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 ‘int(9)
DECLARE finished INTEGER DEFAULT 0;
DECLARE V_msisdn int(9) DEFAULT 0;
i check the SQL syntax alone it is working
Our Experts can help you with the issue, we’ll be happy to talk to you on chat (click on the icon at right-bottom).
Источник
MySQL error 1064
Автор: Василий Лукьянчиков , vl (at) sqlinfo (dot) ru
Статья ориентирована на новичков. В ней объясняется, что означает ошибка сервера MySQL №1064, рассматриваются типичные ситуации и причины возникновения этой ошибки, а также даются рекомендации по исправлению.
Рассмотрим простейший пример.
Сервер MySQL сообщает, что в первой строке нашего SQL запроса имеется синтаксическая ошибка, и в одинарных кавычках цитирует часть запроса с того места где начинается ошибка. Это очень полезное свойство, так как позволяет сразу определить место, которое сервер счел ошибочным. В данном случае это ‘-10,10’, ошибка возникает из-за того, что параметр LIMIT не может быть отрицательным числом.
Однако, бывает и так, что цитируемый кусок запроса не содержит синтаксической ошибки. Это означает, что данная часть запроса находится не на своем месте из-за чего весь запрос становится синтаксически неверным. Например, отсутствует разделитель между двумя запросами, пропущен кусок запроса, невидимый символ в дампе и т.д. Неудобством таких ситуаций является то, что сообщение об ошибке не содержит исходный запрос. Действия по исправлению зависят от контекста возникновения ошибки. Таковых всего 3:
1. Запрос в редакторе.
Самый простейший случай — вы пишите свой запрос в редакторе. Если причина не опечатка, то:
- Смотреть в документации синтаксис команды для вашей версии сервера MySQL.
Обратите внимание: речь идет о версии сервера MySQL, а не клиента (phpmyadmin, workbench и т.д.). Версию сервера можно узнать выполнив команду select version ( ) ;
2. Перенос базы на другой сервер.
У вас есть дамп (т.е. файл с расширением .sql) и при попытке его импортировать вы получаете ошибку 1064. Причины:
В различных версиях набор ключевых слов и синтаксис может немного отличаться. Наиболее распространенный случай: команда create table, в которой ключевое слово type было заменено на engine. Например, если вы получаете ошибку:
Это означает, что вы переносите базу в пятую версию сервера MySQL, в котором ключевое слово TYPE не поддерживается и его нужно заменить на ENGINE.
Редко бываю случаи, когда перенос идет на старый (
3.23) сервер, который кодировки не поддерживает. Тогда ошибка будет иметь вид:
Такое может произойти, если вы переносите базу с хостинга на локальный комп, где стоит древняя версия MySQL. Лучшим решением в данном случае будет не править дамп, а обновить MySQL.
Часто проблемы вызваны тем, что дамп делается неродными средствами MySQL (например, phpmyadmin) из-за чего в нем могут быть BOM-маркер, собственный синтаксис комментариев, завершения команды и т.д. Кроме того при использовании того же phpmyadmin возможна ситуация при которой из-за ограничения апача на размер передаваемого файла команда будет обрезана, что приведет к ошибке 1064. Например, если вы получаете ошибку:
Значит ваш дамп содержит BOM-маркер. Это три байта в начале файла, помогающие программе определить что данный файл сохранен в кодировке UTF-8. Проблема в том, что MySQL пытается интерпретировать их как команду из-за чего возникает ошибка синтаксиса. Нужно открыть дамп в текстовом редакторе (например, Notepad++) и сохранить без BOM.
Для избежания подобных проблем при создании дампа и его импорте лучше пользоваться родными средствами MySQL, см http://sqlinfo.ru/forum/viewtopic.php?id=583
3. Некорректная работа сайта.
Если во время работы сайта появляются ошибки синтаксиса, то, как правило, причина в установке вами сомнительных модулей к вашей cms. Лучшее решение — отказаться от их использования. Еще лучше предварительно проверять их работу на резервной копии.
Пример. Движок dle 7.2, поставили модуль ,вроде бы все Ок, но:
MySQL Error!
————————
The Error returned was:
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 ‘AND approve=’ 1 ‘ AND date 2008 -10 -04 04 : 34 : 25 ‘ LIMIT 5’ at line 1
Error Number:
1064
SELECT id, title, date , category, alt_name, flag FROM dle_post WHERE MATCH ( title, short_story, full_story, xfields, title ) AGAINST ( ‘Приобретение и оплата скрипта ‘ ) AND id != AND approve= ‘1’ AND date ‘2008-10-04 04:34:25’ LIMIT 5
В данном примере мы видим, что причина ошибки в отсутствии значения после «id != «
Обратите внимание: из процитированного сервером MySQL куска запроса причина ошибки не ясна. Если ваша CMS не показывает весь запрос целиком, то нужно в скриптах найти место где выполняется данный запрос и вывести его на экран командой echo.
Кусок кода, который отвечает за данный запрос это
Далее можно искать откуда взялась переменная $row и почему в ней нет элемента ‘id’ и вносить исправления, но лучше отказаться от использования такого модуля (неизвестно сколько сюрпризов он еще принесет).
Источник
Форум пользователей MySQL
Задавайте вопросы, мы ответим
Страниц: 1
#1 22.11.2010 05:31:00
ERROR 1064 (42000) Я Полный чайник
Прошу прощения у уважаемых пользователей, но я полный чайник, и почитав статьи по основам, не понимаю причины происхождения данной ошибки:
ERROR 1064 (42000): 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 ‘IF EXISTS’ at line 1
Стоит MySQL 5.1
Импортирую схему именно для MySQL, правда, для какой версии — точно не знаю
Подскажите, где ошибка в синтаксисе, и как он должен выглядеть, либо киньте ссылку, на поддерживаемые функции данной версии и их описание, пожалуйста
Комментарий модератора.
В статье ERROR 1064 (42000) объясняется, что означает ошибка сервера MySQL №1064, рассматриваются типичные ситуации и причины возникновения этой ошибки, а также даются рекомендации по исправлению.
Отредактированно NewUse (22.11.2010 05:31:34)
#2 22.11.2010 06:42:48
Re: ERROR 1064 (42000) Я Полный чайник
#3 23.11.2010 01:50:30
Re: ERROR 1064 (42000) Я Полный чайник
Да, спасибо, заработало, помогите, пожалуйста исправить ещё одну ошибочку такого же типа (несовместимость версий):
Сайтик под предположительно php4+MySQL — версия ранняя 2004г или ранее:
while ( $row = $query -> fetchRow ( ) ) <
unset ( $ROW ) ;
$row [ packet ] = «$row[packet] n » ;
$TMP_ROW = «» » . $INDEX_PAGE [ edit ] . » » border=0> n » ;
if ( $row [ action ] > 0 ) <
$TMP_ROW .= » | » » . $INDEX_PAGE [ price ] . » » border=0> n » ;
>
$TMP_ROW .= » | » » . $NIBS_TEXT [ delete ] . » » border=0> n » ;
$row [ action ] = $TMP_ROW ;
$count = $db -> getRow ( «select count($username) as $username from users where gid=$row[gid]» ) ;
$row [ num_users ] = $count [ $username ] ;
$TOTAL_USER += $count [ $username ] ;
$TRAF_ARRAY = $db -> GetRow ( «select sum(in_bytes) as in_bytes, sum(out_bytes) as out_bytes from » .NIBS_ACCT_TABLE. » where gid=» . $row [ gid ] ) ;
$row [ gid ] = round ( $TRAF_ARRAY [ in_bytes ] / ( 1024 * 1024 ) , $ROUND_DIGIT ) . «/» ;
$row [ gid ] .= round ( $TRAF_ARRAY [ out_bytes ] / ( 1024 * 1024 ) , $ROUND_DIGIT ) ;
$TOTAL_IN += $TRAF_ARRAY [ in_bytes ] ;
$TOTAL_OUT += $TRAF_ARRAY [ out_bytes ] ;
while ( list ( $key , $val ) = each ( $row ) ) <
if ( $HEADER ) <
$TMP_HEADER [ ] = array ( VARS => $NIBS_TEXT [ $key ] ,
TD_CLR => HDR_CLR,
TH => true ) ;
>
$ROW [ ] = array ( VARS => $val ,
TD_PAR => «align=middle» ,
TD_CLR => DEF_CLR ) ;
>
if ( $HEADER ) <
$HEADER = false ;
$ARRAY [ ] = $TMP_HEADER ;
>
$ARRAY [ ] = $ROW ;
PHP Fatal error: Call to a member function fetchRow() on a non-object in /usr/local/www/data/index.php on line 13
#4 23.11.2010 01:59:31
Re: ERROR 1064 (42000) Я Полный чайник
Как следует из текста ошибки — Вы пытаетесь вызвать метод у сущности,
не являющейся объектом. Задавайте, пожалуйста, вопросы по PHP на
webew.ru.
#5 23.11.2010 15:28:00
Re: ERROR 1064 (42000) Я Полный чайник
Спасибо, а такой синтаксис в MySQL5 допустим?
Источник
So, you’re creating a custom SQL query to perform a task in the database. After putting the code together and running it in PHPmyAdmin it responds with a 1064 error. It may look similar to this:
The 1064 error displays any time you have an issue with your SQL syntax, and is often due to using reserved words, missing data in the database, or mistyped/obsolete commands. So follow along and learn more about what the 1064 error is, some likely causes, and general troubleshooting steps.
Note: Since syntax errors can be hard to locate in long queries, the following online tools can often save time by checking your code and locating issues:
- PiliApp MySQL Syntax Check
- EverSQL SQL Query Syntax Check & Validator
Causes for the 1064 error
- Reserved Words
- Missing Data
- Mistyped Commands
- Obsolete Commands
This may seem cryptic since it is a general error pointing to a syntax issue in the SQL Query statement. Since the 1064 error can have multiple causes, we will go over the most common things that will result in this error and show you how to fix them. Follow along so you can get your SQL queries updated and running successfully.
Using Reserved Words
Every version of MySQL has its own list of reserved words. These are words that are used for specific purposes or to perform specific functions within the MySQL engine. If you attempt to use one of these reserved words, you will receive the 1064 error. For example, below is a short SQL query that uses a reserved word as a table name.
CREATE TABLE alter (first_day DATE, last_day DATE);
How to fix it:
Just because the word alter is reserved does not mean it cannot be used, it just has special requirements to use it as the MySQL engine is trying to call the functionality for the alter command. To fix the issue, you will want to surround the word with backticks, this is usually the button just to the left of the “1” button on the keyboard. The code block below shows how the code will need to look in order to run properly.
CREATE TABLE `alter` (first_day DATE, last_day DATE);
Missing Data
Sometimes data can be missing from the database. This causes issues when the data is required for a query to complete. For example, if a database is built requiring an ID number for every student, it is reasonable to assume a query will be built to pull a student record by that ID number. Such a query would look like this:
SELECT * from students WHERE studentID = $id
If the $id is never properly filled in the code, the query would look like this to the server:
SELECT * from students WHERE studentID =
Since there is nothing there, the MySQL engine gets confused and complains via a 1064 error.
How to fix it:
Hopefully, your application will have some sort of interface that will allow you to bring up the particular record and add the missing data. This is tricky because if the missing data is the unique identifier, it will likely need that information to bring it up, thus resulting in the same error. You can also go into the database (typically within phpMyAdmin) where you can select the particular row from the appropriate table and manually add the data.
Mistyping of Commands
One of the most common causes for the 1064 error is when a SQL statement uses a mistyped command. This is very easy to do and is easily missed when troubleshooting at first. Our example shows an UPDATE command that is accidentally misspelled.
UDPATE table1 SET id = 0;
How to fix it:
Be sure to check your commands prior to running them and ensure they are all spelled correctly.
Below is the syntax for the correct query statement.
UPDATE table1 SET id = 0;
Obsolete Commands
Some commands that were deprecated (slated for removal but still allowed for a period of time) eventually go obsolete. This means that the command is no longer valid in the SQL statement. One of the more common commands is the ‘TYPE‘ command. This has been deprecated since MySQL 4.1 but was finally removed as of version 5.1, where it now gives a syntax error. The ‘TYPE‘ command has been replaced with the ‘ENGINE‘ command. Below is an example of the old version:
CREATE TABLE t (i INT) TYPE = INNODB;
This should be replaced with the new command as below:
CREATE TABLE t (i INT) ENGINE = INNODB;
For developers or sysadmins experienced with the command line, get High-Availability and Root Access for your application, service, and websites with Cloud VPS Hosting.
Error 1064 Summary
As you can see there is more than one cause for the 1064 error within MySQL code. Now, you know how to correct the issues with your SQL Syntax, so your query can run successfully. This list will be updated as more specific instances are reported.
Всем привет!!! пытаюсь прикрутить sphinx к сайту, получаю вот такую ошибку
SQLSTATE[42000]: Syntax error or access violation: 1064 unknown local index
вот опишу конфиги
Код: Выделить всё
source db
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass =****(тут пароль к БД)
sql_db =db
sql_port = 3306 # optional, default is 3306
sql_query_pre = SET NAMES utf8
sql_query =
SELECT id_place, id_user, UNIX_TIMESTAMP(date_meet) AS date_meet, header, description
FROM place
sql_attr_uint =id_user
sql_attr_timestamp =date_meet
sql_query_info = SELECT * FROM place WHERE id_place=$id
}
index foundMe
{
source = db
path = /var/lib/sphinxsearch/data/db
morphology = stem_en, stem_ru, soundex # набор морфологическиз препроцессоров для обработки.
min_word_len = 1
docinfo = extern
charset_type = utf-8
}
indexer
{
mem_limit = 32M
}
searchd
{
listen = localhost:9306:mysql41# порт для комуникаций с MySQL
log = /var/log/sphinxsearch/searchd.log# логи демона
query_log = /var/log/sphinxsearch/query.log# логи поисковых запросов
read_timeout = 5# таймаут чтения в секундах
max_children = 30 # Максимально допустимое количество порождаемых процессов
pid_file = /var/run/sphinxsearch/searchd.pid# PID(ProcessID) файл родительского процесса
max_matches = 1000# Максимальное количество полученных результатов
seamless_rotate = 1# предотвращает паралич search при работе с большим количеством кешируемых данных
preopen_indexes = 0# Откривать все индексы при запуске, 0 - нет
unlink_old = 1# чистка старых индексов, 1 - да
}
далее я проиндексировал
sudo indexer —all
потом исправил
sudo nano /etc/default/sphinxsearch
START=yes
потом
sudo service sphinxsearch start
теперь командой
sudo netstat -tpln
tcp 0 0 127.0.0.1:9306 0.0.0.0:* LISTEN 4133/searchd
вот
далее по гайду https://github.com/yiisoft/yii2-sphinx/ … docs/guide добавил в конфиг всё это
Код: Выделить всё
'components' => [
'sphinx' => [
'class' => 'yiisphinxConnection',
'dsn' => 'mysql:host=127.0.0.1;port=9306;dbname=db;',
'username' => 'root',
'password' => '***',(пароль)
],
далее просто в layoutmain.php (для примера ) вставил кусок кода
Код: Выделить всё
$sql = 'SELECT * FROM place WHERE id_place = :id';
$params = [
'id' => 4
];
$rows = Yii::$app->sphinx->createCommand($sql, $params)->queryAll();
вот и получаю страницу с ошибкой
SQLSTATE[42000]: Syntax error or access violation: 1064 unknown local index ‘place_person’ in search request
The SQL being executed was: SELECT * FROM place WHERE id_place = 4
Error Info: Array
(
[0] => 42000
[1] => 1064
[2] => unknown local index ‘place’ in search request
)
↵
Caused by: PDOException
SQLSTATE[42000]: Syntax error or access violation: 1064 unknown local index ‘place’ in search request
запись в бд с номером 4 есть
Скажите пожалуйста в чем ошибка?
Спасибо!