簡體   English   中英

准備好的陳述……我在做什么錯?

[英]Prepared Statements… What am I Doing Wrong?

我正在嘗試同時更新一些代碼並更新我的編碼技能。 在幾個站點上查看准備好的語句后,我嘗試將其整理為准備好的語句:

$db=new Database();
$query='SELECT * FROM `student` WHERE `student_id`="'.$student_id.'" LIMIT 1';
$result=$db->query($query)or die('...');
$row=$result->fetch_assoc();

作為“輕松”的第一步,我嘗試使用不帶任何變量的預處理語句,因為我似乎無可救葯地停留在基本水平上:

    $db = new mysqli("localhost", "uname", "pword", "astro8_gakkou");
    if(!($stmt=$db->prepare("SELECT * FROM `student` WHERE `student_id`=5 LIMIT 1"))){
        echo "Prepare failed: (".$db->errno.") ".$db->error;
    }
    if(!$stmt->execute()){
        echo "Execute failed: (".$db->errno.") ".$db->error;
    }
    $result=$stmt->get_result();
    $row=$result->fetch_assoc();

這會殺死php。 這是罪魁禍首的最后一行,但我不明白為什么。 我知道我只是傻瓜,但是有人可以指出我所缺少的基本概念嗎? 我已經閱讀了php.net和許多其他網站,但似乎看不到我缺少了什么步驟。

更新:仍然無法正常工作,但是我已經更新了代碼。 日志現在顯示此錯誤:

[2014年3月14日22:34:10 America / New_York] PHP致命錯誤:在第38行的/webdocs/zinc/class.Student.inc中調用未定義的方法mysqli_stmt :: get_result()

好像您缺少$result = $stmt->get_result();

然后拉結果$row = $result->fetch_assoc();

在此處簽出第一個用戶提供的注釋: http : //www.php.net/manual/en/mysqli.prepare.php

盡管有我的其他聲明,但答案是使用PDO。 用最簡單的形式是:

$db=new Database();
$query='SELECT * FROM `student` WHERE `student_id`="'.$student_id.'" LIMIT 1';
$result=$db->query($query)or die('...');
$row=$result->fetch_assoc();

變成了這個(使用PDO和准備好的語句):

$db=new PDO("mysql:dbname=school;host=localhost","root","root");
$stmt=$db->prepare("SELECT * FROM `student` WHERE `student_id`= ? LIMIT 1");
$stmt->bindParam(1,$student_id);
$stmt->execute();
$row=$stmt->fetch();

非常感謝促使我(大喊大叫)使用PDO的人們。 這樣效果很好,不會拋出任何錯誤。 這將意味着需要更多的工作來更新代碼,但是從長遠來看,我認為這是值得的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM