2016-08-29 20 views
0

mysqli_insert_idを使用して最後のauto_increment_IDを取得する機能をテストしています。 2つの異なる方法を使用するかどうかを調べると、私はかなり混乱していると感じます。結果は異なります。mysqli_insert_idがPHPのOOPメソッドで動作していません

方法1

<?php 
$servername = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "myDB"; 

// Create connection 
$conn = mysqli_connect($servername, $username, $password, $dbname); 
// Check connection 
if (!$conn) { 
die("Connection failed: " . mysqli_connect_error()); 
} 

$sql = "INSERT into item(uid,item_id,item_name,item_price,item_quantity) 
        VALUES('1','0','hhh','23','23');"; 

if (mysqli_query($conn, $sql)) { 
$last_id = mysqli_insert_id($conn); 
echo "New record created successfully. Last inserted ID is: " . $last_id; 
} else { 
echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 

mysqli_close($conn); 
?> 

私は最後のIDを取得することができますので、この手続きの方法が機能しています。

方法2

をdb.phpこのメソッドは、単純に動作しません

require "db.php"; 

$db=new db('localhost','bs','root',''); 

$sql = "INSERT into item(uid,item_id,item_name,item_price,item_quantity) 
        VALUES('1','0','hhh','23','23');"; 

if (mysqli_query($db->conn(), $sql)) { 
$last_id = mysqli_insert_id($db->conn()); 
echo "New record created successfully. Last inserted ID is: " . $last_id; 
} else { 
echo "Error: " . $sql . "<br>" . mysqli_error($db->conn()); 
} 

mysqli_close($db->conn()); 

class db{ 

protected $db_host; 
protected $db_name; 
protected $db_user_name; 
protected $db_pass; 

public function __construct($host,$db_n,$user_n,$pass) { 
    $this->db_host=$host; 
    $this->db_name=$db_n; 
    $this->db_user_name=$user_n; 
    $this->db_pass=$pass; 
} 

public function conn(){ 
    return mysqli_connect($this->db_host, $this->db_user_name, $this->db_pass, $this->db_name); 
} 
} 

test.phpを...それは結果0を取得します。誰が私が間違っていたのか知​​っていますか? variable.asにあなたは$ DB-> CONN(と呼ばれるという理由だけで

答えて

1

ばかりその後、一度->conn()方法を初期化しますそれを再使用してください。すべての呼び出しは、新しいものを作成します。

$db = new db('localhost','bs','root',''); 
$connection = $db->conn(); // initialize once 
$sql = "INSERT into item(uid,item_id,item_name,item_price,item_quantity) 
        VALUES('1','0','hhh','23','23');"; 

if (mysqli_query($connection, $sql)) { 
    $last_id = mysqli_insert_id($connection); 
    echo "New record created successfully. Last inserted ID is: " . $last_id; 
} else { 
    echo "Error: " . $sql . "<br>" . $connection->error; 
} 

$connection->close(); 

やオブジェクト指向インターフェース(->insert_idプロパティ)を使用して:ちょっとTHXゴースト、ほんの少しの質問は、私はちょうどそのコーディングショーのどのラインを知りたい

$db = new db('localhost','bs','root',''); 
$connection = $db->conn(); // initialize once 
$sql = "INSERT into item(uid,item_id,item_name,item_price,item_quantity) 
        VALUES('1','0','hhh','23','23');"; 

if($connection->query($sql)) { 
    $last_id = $connection->insert_id; 
    echo "New record created successfully. Last inserted ID is: " . $last_id; 
} else {  
    echo "Error: " . $sql . "<br>" . $connection->error; 
} 

$connection->close(); 
+0

を私は2回初期化する?私はPHPには新しく、なぜ部分が間違っているのか知りたいのです。 – gosulove

+0

@gosuloveあなたは '$ db-> conn()'を何回も使ったことがあります。上記のコードを3回見て、dbクラスを初期化した後で '$ db-> conn()'を一度割り当ててから、 – Ghost

1

)を2回、あなたは($ DB-> CONNを割り当てる必要がありますが)、以下:

require "db.php"; 

$db=new db('localhost','bs','root',''); 

$sql = "INSERT into item(uid,item_id,item_name,item_price,item_quantity) 
       VALUES('1','0','hhh','23','23');"; 

$conn = $db->conn(); 
if (mysqli_query($conn, $sql)) { 
    $last_id = mysqli_insert_id($conn); 
    echo "New record created successfully. Last inserted ID is: " . $last_id; 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 

mysqli_close($conn); 
関連する問題