MYSQL PHP
Estou utilizando mysql com php.
Tenho um procedure que faz a sequencia de chaves da minha base.
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.
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;
}
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.
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.
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.
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.
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.
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.
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)
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)
Versao da base 5.2.12.
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.
Shop é o nome da base de dados.
Se eu tiro da erro dizendo que nao foi selecionada a base de dados.
Se eu tiro da erro dizendo que nao foi selecionada a base de dados.
então se a base de dados e shop o que é sequenciador?
ja tentou só
ja tentou só
Select Contador + 1 From Shop Where Tabela = pTabela;
Sequenciador é minha tabela.
então colega quantas bases de dados vc possui, pois deveria ser algo assim
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
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
Tópico encerrado , respostas não são mais permitidas