Mysqli () çalışmıyor bindParam içinde Bildirimi hazırlandı

2 Cevap php

Sadece her zamanki gibi ben PHP ile etrafında en iyi uygulamaları bakıyordu, ve hazırlanan tablolar gözlerim kapalı ben şimdi nasıl yapmalıyım şeyler tür görünüyor. Yani ben buldum bazı örnekler etrafında oynamaya başladı.

Senaryoyu çalıştırırken bu hata var:

Fatal error: Call to a member function bindParam() on a non-object in /opt/lampp/htdocs/phpSecurity/PreparedStatments/Insert-Multi-Binded-Params/Insert Simple Method.php on line 10

İşte bu kodu gider.

Insert Simple Method.php

<?php
require_once '../config.php';

$stmt = $db->prepare("INSERT INTO coisas (nome, telefone, bi) VALUES (?, ?, ?)");

$nome = 'Fabio Antunes';
$telefone = 916810641;
$bi = 123093456;

$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);

$stmt->execute();

$stmt->close();

$db->close();
?>

config.php

<?php
$server_host = 'localhost';
$server_user = 'root';
$server_password = '';
$server_db = 'PreparedStatements';
$db = new mysqli($server_host, $server_user, $server_password, $server_db);
?>

Not sure what i'm doing wrong here, this is similar example found at php.net, why isn't working? PS: I think the mysqli connection isn't the problem because I've used it to do some prepared statements with SELECT SQL commands. And worked pretty well.


EDIT

Çözünürlük ve neden.

Eh example i sorguda her değer için bind_param() kullanmalısınız. Ama Bart sayesinde, o benim koduyla sorunu çözmek için başardı.

Where it is:

$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);

It should be:

$stmt->bind_param("sii", $nome, $telefone, $bi);

Şimdi "sii" ne olduğunu merak ediyor olabilirsiniz olanlar için.

Peki ben her soru işareti için "$ var" bağlanan gördükleri için bind_param "?" indirin.

Yani biriyle bind_param() i aynı anda hepsini bağlayabilir, ve normal kullanım bind_param() veri binded olma türünü belirtmek gerekir.

Binded olmak için ilk değer "s" ile belirtilen $nome bir dize ise;

Ve diğerleri $telefone ve $bi o "i" olması için Integers vardır;

Burada da benzer bir sorun var diğerleri için (php.net itibaren) diğer veri türlerini gider.

i = Integer;

s = String;

d = Çift;

b = Blob;

Daha iyi bir açıklama olarak birisi gönderebilir veya yorum lütfen. Yani ben kendi artırabilirsiniz.

Teşekkürler.

2 Cevap

Orada bağlantı ile yanlış bir şey, ama emin olmak için kontrol etmelisiniz düşünebilir:

$db = new mysqli($server_host, $server_user, $server_password, $server_db);
if (mysqli_connect_errno()) {
    printf("DB error: %s", mysqli_connect_error());
    exit();
}

EDIT:

Yapmanız ne olur:

$stmt = $db->prepare("INSERT INTO coisas (nome, telefone, bi) VALUES (?, ?, ?)");
$stmt->bind_param("sii", $nome, $telefone, $bi);
$stmt->execute();

?

Tablo coisas düzgün yazıldığından?

Eğer satırında 4 $ stmt bir print_r geri alırım sonra. gerçek bir nesne midir? Ben tahmin ediyorum.