0

まず、MySQLi との初めての出会いです... MySQLi の方が優れていると聞きましたが、コードを書くたびに、

致命的なエラー: オブジェクト以外でのメンバ関数 bind_param() の呼び出し

私のコードはこれです:

<?php
/* Create a new mysqli object with database connection parameters */
$m = new mysqli('localhost', 'root', '', 'mysqlisample');
if(mysqli_connect_errno()) {
echo "Connection Failed: " . mysqli_connect_errno();
exit();
}
$ida=1;
$statement = $m->prepare("SELECT * FROM post WHERE `id` =  ?");
$statement->bind_param("i",$ida);
$id = 0;
$post_title = '';
$post_content = '';
$statement->bind_result($id,$post_title,$post_content);
$statement->execute();
while ($statement->fetch()){
echo $id.' '.$post_title.' '.$post_content.'\n'; //These variables will get the values of the current row
}
?>

これは、私がどこかで読んだ多くのコード サンプルの 1 つにすぎませんが、どれも機能していません。

MySQLiクエリを実行して結果を出力する正しい方法は何ですか?

4

2 に答える 2

1

古いmysql_stuffを使用していたOReillyの本を読んでいるときにこれを解決しましたが、どの例も機能しませんでした。明らかに、テーブル用に変更する必要があります:)しかし、私が持っているテーブルでは機能します。これは、準備されたステートメントに対して機能します。

<?php

//this file is just where my db info is, you can use the literal values
require 'login.php';

$db = new mysqli($db_hostname, $db_username, $db_password, $db_database);
$stmt = $db->stmt_init();
$data = array("Emily Bronte", "Wuthering Heights", "Classic Fiction", "1847", "9780553212587");

if($stmt->prepare("INSERT INTO classics(author, title, category, year, isbn) VALUES(?,?,?,?,?)"))
{
    $stmt->bind_param('sssss', $data[0], $data[1], $data[2], $data[3], $data[4]);
    $stmt->execute();
    $stmt->close();
}

?>

これはクエリで機能します:

<?php
require_once 'login.php';
$dbt = new mysqli($db_hostname, $db_username, $db_password, $db_database);
if ($dbt->connect_errno) 
    die("Unable to connect to MySQL: " . $dbt->connect_errno);

$results = $dbt->query("SELECT * FROM cats");

if (!$results) 
    die ("Database access failed: " . $db->error);

$dbt->close();

echo "<table><tr> <th>Id</th> <th>Family</th>
<th>Name</th><th>Age</th></tr>";

for ($j = 0 ; $j < $results->num_rows ; ++$j)
{
    $row = $results->fetch_row();
    echo "<tr>";
    for ($k = 0 ; $k < sizeof($row) ; ++$k) 
        echo "<td>$row[$k]</td>";
    echo "</tr>";
}
echo "</table>";

?>
于 2013-02-05T14:56:12.907 に答える
0

問題は、が$statement->bind_param("i",$ida);返されるため、メソッドをfalse呼び出すことができないことですbind_paramfalse

参照: http://php.net/manual/de/mysqli.prepare.php

試す:

mysqli_stmt_bind_param($statement, "i", $ida);

それ以外の:

$statement->bind_param("i",$ida);
于 2013-02-05T14:51:30.250 に答える