Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
estou usando mysqli_stmt para apresentar dados do banco na página de cadastro, mas estou encontrando os erros abaixo, ao executar o stmt:
no vetor erro do stmt: Incorrect number of arguments for PROCEDURE passagemlivre.sp_lista_usuarios; expected 0, got 1
na hora de fazer o bint : mysqli_stmt_bind_result(): Number of bind variables doesn't match number of fields in prepared statement
o código é:
$cn = mysqli_connect("$host","$user","$pass") or exit(mysqli_error($cn));
mysqli_select_db($cn,'passagemlivre') or exit(mysqli_error($cn));
if ($stmt = $mysqli->prepare($cn, "call sp_lista_usuarios(?,?,?,?,?,?,?,?,?,?,?,?)")) {
//$id_cnpj = 1234;
$stmt->bind_param($stmt, "ssssssssssss", $cpf, $cnpj, $nome, $apelido, $telefone, $email, $status, $senha, $razao, $fantasia, $filial, $area);
$stmt->execute($stmt);
$stmt->bind_result($stmt, $cpf, $cnpj, $nome, $apelido, $telefone, $email, $status, $senha, $razao, $fantasia, $filial, $area);
$stmt->fetch($stmt);
$stmt->close($stmt);
}
obrigado!!
alisson, vlw a atenção...mas continua dando os erros:
erros:
Incorrect number of arguments for PROCEDURE passagemlivre.sp_lista_usuarios; expected 0, got 12
mysqli_stmt_bind_result(): Number of bind variables doesn't match number of fields in prepared statement
( ! ) Warning: mysqli_stmt_bind_result(): Number of bind variables doesn't match number of fields in prepared statement in C:\xampp\htdocs\workspace\passagemlivre\cadastrotesteloaduser.php on line 248 Call Stack # Time Memory Function Location 1 0.0140 147208 {main}( ) ..\cadastrotesteloaduser.php:0 2 121.9570 197584 mysqli_stmt_bind_result ( ???, ???, ???, ???, ???, ???, ???, ???, ???, ???, ???, ???, ??? ) ..\cadastrotesteloaduser.php:248
código php:
$cn = mysqli_connect("$host","$user","$pass") or exit(mysqli_error($cn));
mysqli_select_db($cn,'passagemlivre') or exit(mysqli_error($cn));
if ($stmt = mysqli_prepare($cn, "call sp_lista_usuarios(?,?,?,?,?,?,?,?,?,?,?,?)")) {
mysqli_stmt_bind_param($stmt, "iissisiissss", $cpf, $cnpj, $nome, $apelido, $telefone, $email, $status, $senha, $razao, $fantasia, $filial, $area);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $cpf, $cnpj, $nome, $apelido, $telefone, $email, $status, $senha, $razao, $fantasia, $filial, $area);
mysqli_stmt_fetch($stmt);
mysqli_stmt_close($stmt);
}
procedure:
CREATE PROCEDURE passagemlivre.sp_lista_usuarios()
BEGIN
SELECT a.id_cpf as cpf,
a.id_cnpj as cnpj,
a.nome as nome,
a.apelido as apelido,
a.telefone as telefone,
a.email as email,
a.status as status,
a.senha as senha,
b.razao as razao,
b.fantasia as fantasia,
b.filial as filial,
b.area as area
FROM passagemlivre.tbl_cad_user a
INNER JOIN passagemlivre.tbl_cad_empresa b
ON a.id_cnpj = b.id_cnpjpelo que estou tentando entender é problema na procedure? ....será que é isso?
vlw glr...ainda preciso de ajuda...obrigadoe
Sua PROCEDURE não recebe parametros:
passagemlivre.sp_lista_usuarios()
então não passe parametros na chamada mysqli_prepare:
if ($stmt = mysqli_prepare($cn, "call sp_lista_usuarios()")) {
// mysqli_stmt_bind_param($stmt, "iissisiissss", $cpf, $cnpj, $nome, $apelido, $telefone, $email, $status, $senha, $razao, $fantasia, $filial, $area);
preciso de mais uma ajudinha...vlw
evolui mais 1 pouco mas ainda não consegui. Mudei a procedure para:
>
CREATE PROCEDURE passagemlivre.sp_lista_usuarios(
param_id_cnpj varchar(100))
BEGIN
SELECT a.id_cpf as cpf,
a.id_cnpj as cnpj,
a.nome as nome,
a.apelido as apelido,
a.telefone as telefone,
a.email as email,
a.status as status,
a.senha as senha,
b.razao as razao,
b.fantasia as fantasia,
b.filial as filial,
b.area as area
/*b.cnpj as cnpj*/
FROM passagemlivre.tbl_cad_user a
INNER JOIN passagemlivre.tbl_cad_empresa b
ON a.id_cnpj = b.id_cnpj
ORDER BY a.nome ASC;
END$$
com o código
>
if ($stmt = mysqli_prepare($cn, 'call sp_lista_usuarios(?)')) {
$cnpj = '1234';
mysqli_stmt_bind_param($stmt, 's', $cnpj);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $cpf, $cnpj, $nome, $apelido, $telefone, $email, $status, $senha, $razao, $fantasia, $filial, $area);
mysqli_stmt_fetch($stmt);
mysqli_stmt_close($stmt);
}
esta retornando o primeiro registro do banco nas variáveis. Já é 1 passo, mas deveria voltar 5 registros.
agora os problemas que apresentam são:
( ! ) Warning: main(): Property access is not allowed yet in C:\xampp\htdocs\workspace\passagemlivre\cadastrotesteloaduser.php on line 287 Call Stack # Time Memory Function Location 1 0.0400 147224 {main}( ) ..\cadastrotesteloaduser.php:0
( ! ) Warning: main(): Couldn't fetch mysqli_stmt in C:\xampp\htdocs\workspace\passagemlivre\cadastrotesteloaduser.php on line 287 Call Stack # Time Memory Function Location 1 0.0400 147224 {main}( ) ..\cadastrotesteloaduser.php:0
e o erro do eclipse:
" an internal error occurred during "label job" e "has children update"
java.lang.NullPointerException
Olá.
O primeiro erro provavelmente é porque o número de parâmetros definidos na sua PROCEDURE está diferente do que você esta passando na chamada prepare($query). Observando o erro diz que a PROCEDURE não aceita parâmetros.
Acho também que você esta misturando os estilos procedural e orienta a objetos da extensão mysqli.
Ou você usa orientado a objetos:
$cn = new mysqli("$host","$user","$pass")
$stmt = $cn->prepare("call sp_lista_usuarios(?,?,?,?,?,?,?,?,?,?,?,?)")
Ou usa procedural:
$cn = mysqli_connect("$host","$user","$pass")
$stmt = mysqli_prepare($cn, "call sp_lista_usuarios(?,?,?,?,?,?,?,?,?,?,?,?)")
O segundo erro é porque o número de parâmetros passados na chamada bind_result($var1, $var2, $var...) deve ser igual ao número de campos selecionados pela sua PROCEDURE.