Премини към съдържанието
15 години Kaldata.com – време е да почерпим! Прочети още... ×
Lolmaster

PHP INSERT връща грешка (You have an error in your SQL syntax)

Препоръчан отговор


Пълен новак съм в php средите...Но не мога да схвана къде бъркам и какво причинява следната грешка:

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 ''from', 'toza') VALUES ('ownyzo','EXE')' at line 1

 

Ето го и кода

$sql= mysql_query("INSERT INTO bb_donations('from', 'toza') VALUES ('$name','$potreb') ") or die(mysql_error());

Където

$name = $user->data['username_clean']; //phpbb, $name e sas stoinost ownyzo$potreb = $_POST['potreb']; // idva ot tazi formaПотребител:<input class="input" type="text" size="35" name="potreb" />

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

$sql = "INSERT INTO `bb_donations`(`from`, `toza`) ";$sql.= "VALUES('$name','$potreb')";$result = @mysql_query($sql);if(!$result){    $log = './logs/sql_errors.txt';    $error = 'Date = '.date("r", time()).' '.mysql_error();    file_put_contents($log, $error."n", FILE_APPEND);    die('Проблем с съединението, опитайте по-късно!');}

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Един съвет към Lolmaster:

- когато работите с данни, които идват от вън ($_GET, $_POST,... заявки)

има опасност от SQL инжектиране на зловреден код във вашата база от данни,

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

 

Ако работите с php версия < 5.0 можете да ползвате функцията mysql_real_escape_string 

или по-скоро mysqli библиотека. Аз лично предпочитам PDO,

но е необходима версия на php от 5.1 и нагоре.

 

Този линк може да ви е полезен,

но ако не се справяте с английския език можете да потърсите информация на български език.

 

Поздрави.

 

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Мерси  :)


Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ако работите с php версия < 5.0 можете да ползвате функцията mysql_real_escape_string

или по-скоро mysqli библиотека. Аз лично предпочитам PDO,

но е необходима версия на php от 5.1 и нагоре.

 

Който пише сериозен код на PHP, ползва PDO. :)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Който пише сериозен код на PHP, ползва PDO. :)

 

Я прочети тук.  И понеже в 99% при PHP-скриптове главната роля за база поема MySQL , то PDO диша праха на MySQLi. Последното е тесноспециализран драйвер, препоръчван от самите разработчици на PHP.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Я прочети тук.  И понеже в 99% при PHP-скриптове главната роля за база поема MySQL , то PDO диша праха на MySQLi. Последното е тесноспециализран драйвер, препоръчван от самите разработчици на PHP.

 

Нормално. PHP девелопърите ги мързи да се учат да пишат ООП код.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

 

Пълен новак съм в php средите...Но не мога да схвана къде бъркам и какво причинява следната грешка:

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 ''from', 'toza') VALUES ('ownyzo','EXE')' at line 1

 

Ето го и кода

$sql= mysql_query("INSERT INTO bb_donations('from', 'toza') VALUES ('$name','$potreb') ") or die(mysql_error());

Където

$name = $user->data['username_clean']; //phpbb, $name e sas stoinost ownyzo$potreb = $_POST['potreb']; // idva ot tazi formaПотребител:<input class="input" type="text" size="35" name="potreb" />

Хрумна ми една идея: мисля имате колона, която се нарича from. Защо не я преименувате на нещо, което не е ключова дума на SQL и да пробвате пак

  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Нормално. PHP девелопърите ги мързи да се учат да пишат ООП код.

 

Ти въобще прочете ли посочения линк? И какво си се придрал с това ООП, след като е по силите на MySQLi! PDO e същото лице, но в анфас с умение да работи с всички възможни SQL сървъри. Отличие спрямо MySQLi е синтаксиса и нищо повече в уменията му. Е да, ама ти пишеш само ООП и въртиш на пръсти sql_lite, postgresql, oracle, percona, microsoft sql server 2008 и т.н..

 

Хрумна ми една идея: мисля имате колона, която се нарича from. Защо не я преименувате на нещо, което не е ключова дума на SQL и да пробвате пак

Колизии не се наблюдават, особено ако се следва правилото имена на полета,  на таблици и на бази, да се слагат в ординарни кавички.

 

Публикувано изображение

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

 

..

Колизии не се наблюдават, особено ако се следва правилото имена на полета,  на таблици и на бази, да се слагат в ординарни кавички.

 

Публикувано изображение

Но не се смята за добра практика при RDBMS. Особено когато е намесен език чрез който се достъпва базата

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

...

 

Разбира се. Няма език, в когото добра практика е да се ползват резервирани изрази. И за да избегнат конфликти, ако някого все пак го сърби точно тях да ползва е кавички, за които споменах в предния си коментар.  И ето без кавичките какво следва.

 

Публикувано изображение

  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

 Ти въобще прочете ли посочения линк? И какво си се придрал с това ООП, след като е по силите на MySQLi! PDO e същото лице, но в анфас с умение да работи с всички възможни SQL сървъри. Отличие спрямо MySQLi е синтаксиса и нищо повече в уменията му. Е да, ама ти пишеш само ООП и въртиш на пръсти sql_lite, postgresql, oracle, percona, microsoft sql server 2008 и т.н..

 

С MySQLi няма как да си направя клас, който автоматично да ми генерира заявки с prepared statements, примерно.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Дай пример с PDO какво точно правиш.

public function insert_query() {	// this is a property:	$fields = array('firstname', 'sirname', 'lastname', 'email');		$placeholders = array();	$values = array();	foreach ($fields as $field) {		$placeholders[] = '?';		$values[] = $_POST[$field];	}		$sql = 'INSERT INTO users (' .			implode(',', $fields) .			') VALUES(' .			implode(',', $placeholders) . ')';	$stmt = $this->_db->prepare($sql);		$stmt->execute($values);}
Редактирано от gothicrock (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Tова ли било? Показа някаква изрезка от клас! И на какво акцентираш, на placeholders и на питанката? А подобна екзотика виждам за първи път. В глобален масив $_POST, вместо име на елемента от масива - промелива.

$values[] = $_POST[$field];

Това ще ти е полза.

 

 

Като изгледаш урока и схванеш нещата, пренапиши си класа (ООП-то) и после пусни един бенчмарк на Apache ( например,  ab -k -n 10000 -c 100 -t 20 http://bla_bla.com/),

за да се убедиш, че моята коза е мъжка.

 

Не е зле да препрочетеш пост #7 и да направиш разлика между разработчик на PHP  и твоите девелопери, защото изкарваш Ondřej Surý, Andi Gutmans, Zeev Suraskiе, Rasmus Lerdorf и т.н. тъпанари.

 

хайде с здраве

 

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Tова ли било? Показа някаква изрезка от клас! И на какво акцентираш, на placeholders и на питанката? А подобна екзотика виждам за първи път. В глобален масив $_POST, вместо име на елемента от масива - промелива.

$values[] = $_POST[$field];

 

Този $_POST е сложен с илюстративна цел за по-голяма яснота какво се обработва. В един реален клас това трябва да е пропърти с филтрираните данни от POST заявката. Та идеята е да има клас, който автоматично да ми върти заявките към таблиците в уеб приложението и да не се занимавам да пиша излишен код със заявки към базата. Ако ползвам mysqli, ще трябва да пиша допълнителен код, за да постигна същия резултат.

Редактирано от gothicrock (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.