BG Development


  Reply to this topicStart new topicStart Poll

> Проблем с "LOCK TABLES"!
code2
Публикувано на: 05-07-2017, 20:03
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 58
Регистриран на: 11.06.16



Имам следния код:
CODE

$db=new PDO('mysql:host='.HOST.';dbname='.DATABASE.'', USER, PASSWORD,
           array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));      
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);
$query=$db->prepare("LOCK TABLES it WRITE;");
$query->execute();

и на последния ред ми връща следната грешка:
QUOTE
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active.  Consider using PDOStatement::fetchAll().  Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.' in ...

Как може да се оправи тази глупост???
PMEmail Poster
Top
relax4o
Публикувано на: 05-07-2017, 20:29
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1198
Регистриран на: 04.04.07



Вместо execute() пробвай fetchAll() да използваш.

Или след execute() добави fetchAll().

Това мнение е било редактирано от relax4o на 05-07-2017, 20:31


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
code2
Публикувано на: 06-07-2017, 10:39
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 58
Регистриран на: 11.06.16



QUOTE (relax4o @ 05-07-2017, 20:29)
Вместо execute() пробвай fetchAll() да използваш.

Или след execute() добави fetchAll().

То на самото execute ми дава грешка! Каквото и да добавям след него - няма никакъв ефект.
Иначе замяната на execute с fetchAll просто води до това, че sql заявката за заключване не се изпълнява.

Някакви други идеи, как да се оправят нещата?
PMEmail Poster
Top
kapitancho
Публикувано на: 06-07-2017, 11:28
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1015
Регистриран на: 26.02.05



Защо ползваш prepare + execute за заявки, които не четат нищо?

Просто вместо:
CODE
$query=$db->prepare("LOCK TABLES it WRITE;")


Ползвай
CODE
$query=$db->exec("LOCK TABLES it WRITE;")
и разбира се, махни execute-а, който следва.


--------------------
®...¢↓"←—¬ªº±£™×÷⁄...©
PMEmail Poster
Top
code2
Публикувано на: 06-07-2017, 12:51
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 58
Регистриран на: 11.06.16



Да това работи.
Обаче имам друг проблем.
CODE

LOCK TABLES tbl WRITE;
INSERT INTO tbl SELECT MAX(id)+1, '0', '0', '0', '0', '0', -1 FROM tbl;
UNLOCK TABLES;

Това не работи и връща грешка "#1100 - Table 'tbl' was not locked with LOCK TABLES". Някакви идеи?
PMEmail Poster
Top
kapitancho
Публикувано на: 06-07-2017, 13:37
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1015
Регистриран на: 26.02.05



А за какво ти трябва да заключваш таблицата?

Няма ли да стане директно, или евентуално в транзакция, ако има още нещо, което трябва да се изпълни?


--------------------
®...¢↓"←—¬ªº±£™×÷⁄...©
PMEmail Poster
Top
code2
Публикувано на: 06-07-2017, 17:08
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 58
Регистриран на: 11.06.16



В конкретния случай наистина не ми трябва чак заключване. Но просто си искам да си експериментирам, за да имам опит, когато потрябва. Затова нещата ги правя по всевъзможни начини.
Въпросната транзакция ще се изпълнява толкова рядко (при нормални условия), че допълнителното минимално натоварване на mysql сървъра не е от значение.

Иначе като разделих споменатата заявка на 2 части нещата се получиха... Така че, за момента вече си работи.
PMEmail Poster
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0