MYSQL PHP

JEISONANTONI 12/09/2012 19:32:58
#409528
Estou utilizando mysql com php.

Tenho um procedure que faz a sequencia de chaves da minha base.

DELIMITER $$

CREATE PROCEDURE Shop.ProcuraChave
(
IN pTabela VARCHAR(50)
)
BEGIN
Declare Cont INT;
Declare Id INT;

Declare rs2 Cursor For
Select Contador + 1 From Shop.Sequenciador Where Tabela = pTabela;

Declare rs Cursor For
SELECT Contador, IdSequenciador FROM Shop.Sequenciador WHERE Tabela = pTabela;

Open rs;

Fetch rs Into Cont, ID;

Close rs;

if(Cont is null) then
Insert Into Shop.Sequenciador(Tabela, Contador)
Values(pTabela, 1);

Set Cont = 1;
else
Open rs2;

Fetch rs2 Into Cont;

Close rs2;

Update Shop.Sequenciador Set Contador = Cont Where IdSequenciador = ID;
end if;

Select Cont;
END$$

DELIMITER ;


No php eu estou chamando essa procedure, mas quando executo o insert tenho o seguinte erro:
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 [ô]start transaction; lock table Sequenciador write; call Shop.ProcuraChave([ô]Client[ô] at line 1

PHP:
Essa rotina executa a procedure, retorna o id e depois o sistema executa o insert, ai da o erro.
private function ProcuraChave($tabela){
$id = 0;

$sql = [Ô]set autocommit = 0; [Ô];
$sql .= [Ô]start transaction; [Ô];
$sql .= [Ô]lock table Sequenciador write; [Ô];
$sql .= [Ô]call Shop.ProcuraChave([ô]$tabela[ô]); [Ô];
$sql .= [Ô]unlock tables; [Ô];
$sql .= [Ô]commit;[Ô];

$result = $this->DataReader($sql);

while($row = mysql_fetch_array($result)){
$id = $row[0];
}

return $id;
}
ALTAIR148 12/09/2012 19:46:55
#409530
Boa noite,

Amigo, esse fórum não tem como especialidade tratar de outras linguagens que não sejam: ASP CLASSICO, ASP.NET, C#, SQL / DATABASE, VB / VBA e VB.NET. Acredito que se procurar um form com especialidade em PHP terá um retorno mais garantido.


Abraços.
JEISONANTONI 12/09/2012 19:49:07
#409531
Obrigado pelo Retorno.

Achei que pudesse ser alguma coisa relacionado com a base de dados não exatamente com o php.

Já procurei na web mas não encontrei.

Abs.
JEISONANTONI 13/09/2012 08:32:24
#409543
Bom dia,

Reabri o tópico porque o meu problema não está no PHP e sim na base de dados.

Eu poderia estar usando C# ao invés de php e teria o mesmo problema.

Pelo que pesquisei o problema está em eu executar a procedure e depois executar o insert.
VELDRAME 13/09/2012 10:47:13
#409557
Bem, qual a versão do banco que você esta usando?
Pois erro esta te avisando que é forma de executar esta incompatível com o Banco.

(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)
JEISONANTONI 13/09/2012 14:40:35
#409594
Versao da base 5.2.12.
MARCELO.TREZE 13/09/2012 14:49:12
#409595
o problema acredito que esteja no nome da tabela em que vc coloca o ponto (Shop.Sequenciador) sua tabela tem ese nome mesmo se sim tente alterar o nome tirando o ponto.

JEISONANTONI 13/09/2012 15:08:48
#409597
Shop é o nome da base de dados.

Se eu tiro da erro dizendo que nao foi selecionada a base de dados.
MARCELO.TREZE 13/09/2012 15:19:22
#409599
então se a base de dados e shop o que é sequenciador?

ja tentou só

Select Contador + 1 From Shop Where Tabela = pTabela;

JEISONANTONI 13/09/2012 15:39:39
#409602
Sequenciador é minha tabela.
MARCELO.TREZE 13/09/2012 15:46:19
#409603
então colega quantas bases de dados vc possui, pois deveria ser algo assim

DELIMITER $$

CREATE PROCEDURE ProcuraChave
(
IN pTabela VARCHAR(50)
)
BEGIN
Declare Cont INT;
Declare Id INT;

Declare rs2 Cursor For
Select Contador + 1 From Sequenciador Where Tabela = pTabela;

Declare rs Cursor For
SELECT Contador, IdSequenciador FROM Sequenciador WHERE Tabela = pTabela;

Open rs;

Fetch rs Into Cont, ID;

Close rs;

if(Cont is null) then
Insert Into Sequenciador(Tabela, Contador)
Values(pTabela, 1);

Set Cont = 1;
else
Open rs2;

Fetch rs2 Into Cont;

Close rs2;

Update Sequenciador Set Contador = Cont Where IdSequenciador = ID;
end if;

Select Cont;
END$$

DELIMITER ;


repare que tirei o nome da base de dados, pois vc terá que fazer conexão com esta base e depois apenas criar a procedure dentro dela

Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas