MySQL - 执行查询的正确方法?

时间:2013-02-05 14:45:54

标签: php mysqli

首先,这是我与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
}
?>

这只是我在某处读过的许多代码示例中的一个,但是,它们都没有工作......

我的问题是

执行某些MySQLi查询并打印结果的正确方法是什么?

对于我制作的每个项目,我使用mysql_*,但这是不安全的。

请给我一个很好的例子,或者一些不错的教程,因为我无法理解MySQLi ......

如果这个问题重复(也许),我很抱歉,但我需要具体答案。

2 个答案:

答案 0 :(得分:1)

问题是$statement->bind_param("i",$ida);会返回false,因此您无法在bind_param上调用方法false

请参阅:http://php.net/manual/de/mysqli.prepare.php

尝试:

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

而不是:

$statement->bind_param("i",$ida);

答案 1 :(得分:1)

我在浏览OReilly的书时已经解决了这个问题,这本书使用的是旧的mysql_stuff而且没有一个例子可以使用。显然你需要为你的表修改它:)但它适用于我有的表。这适用于准备好的陈述:

<?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>";

?>
相关问题