首頁  >  問答  >  主體

學習如何利用mysqli預處理語句進行資料庫操作

<p>我正在嘗試使用預處理語句,但是下面的程式碼不起作用。我收到了以下錯誤:</p> <blockquote> <p>致命錯誤:在/var/www/prepared.php的第12行呼叫非物件的成員函數execute()</p> </blockquote> <pre class="brush:php;toolbar:false;"><?php $mysqli = new mysqli("localhost", "root", "root", "test"); if ($mysqli->connect_errno) { echo "連線MySQL失敗:" . $mysqli->connect_error; } $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); // 插入一行 $stmt->execute(array('one',1)); // 插入另一行,使用不同的值 $stmt->execute(array('two',1)); ?></pre> <p>另外,我需要使用mysqli來進行預處理語句嗎?有沒有人能給我指出一個完整的預處理語句的範例,包括連接、插入和選擇以及錯誤處理? </p>
P粉838563523P粉838563523445 天前493

全部回覆(2)我來回復

  • P粉729436537

    P粉7294365372023-08-25 12:07:07

    你也可以使用我更喜歡的PDO。實際上,在你的程式碼範例中,你似乎混淆了PDO和Mysqli。

    $db = new PDO($dsn, $user, $pass);
    $stmt = $db->prepare("INSERT INTO users (name, age) VALUES (?,?)");
    $stmt->execute(array($name1, $age1));
    $stmt->execute(array($name2, $age2));

    與mysqli不同,你不需要呼叫單獨的綁定函數,儘管如果你喜歡/想要/需要使用它,該功能是可用的。

    PDO的另一個有趣之處是命名佔位符,它在複雜查詢中可能會更不容易混淆:

    $db = new PDO($dsn, $user, $pass);
    $stmt = $db->prepare("INSERT INTO users (name, age) VALUES (:name,:age)");
    $stmt->execute(array(':name' => $name1, ':age' => $age1));
    $stmt->execute(array(':name' => $name2, ':age' => $age2));

    回覆
    0
  • P粉348088995

    P粉3480889952023-08-25 09:46:53

    來自mysqli::prepare文檔

    bind_param文檔

    即:

    $name = 'one';
    $age  = 1;
    
    $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");
    
    // 绑定参数。我猜测是'string'和'integer',但请阅读文档。
    $stmt->bind_param('si', $name, $age);
    
    // *现在*我们可以执行
    $stmt->execute();

    回覆
    0
  • 取消回覆