Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

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

 

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

Featured Replies

Пълен новак съм в 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= mysql_query("INSERT INTO bb_donations(from, toza) VALUES ('$name','$potreb')") or die(mysql_error());
$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 и да пробвате пак

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

 

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

 

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

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

 

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

 

..

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

 

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

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

...

 

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

 

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

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

 

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

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

Дай пример с 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 (преглед на промените)

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.