1
 $mysqli = new mysqli("localhost","root","","mydatabase");

 if ($result = $mysqli->prepare("SELECT MAX(`id`) AS `id` FROM `mytable` WHERE `row1`=? OR `row2`=?"))
 {

    $id = 2;
    $result->bind_param("ii",$id,$id);
    $result->execute();
    $result->bind_result($max);
    $result->close();

    var_dump($max);

 }

 $mysqli->close();

残念ながら、このコードは常にNULLを示しています。結果に到達する方法を説明してもらえますか?

更新しました:

このようなコンソールモードのスタッフでは、うまく機能します。フィールドidは int でインクリメンタル (PRIMARY INDEX として) であり、他のフィールドは異なる int 値を持つ単なる行であり、何も変更できません。

更新しました:

さて、私は解決策を見つけたようです:

 $mysqli = new mysqli("localhost","root","","mydatabase");

 if ($result = $mysqli->prepare("SELECT MAX(`id`) AS `id` FROM `mytable` WHERE `row1`=? OR `row2`=?"))
 {

    $id = 2;
    $result->bind_param("ii",$id,$id);
    $result->execute();
    $obj = $result->get_result()->fetch_object();
    $max = $obj->id;
    $result->close();

    var_dump($max);

 }

 $mysqli->close();

これです。

4

2 に答える 2

5

私はこのように理解しました:

$result = mysqli_query($con, "SELECT * FROM `TableName` ORDER BY `PID` DESC LIMIT 1");
$row = mysqli_fetch_array($result);
$pidmax=$row['PID'];
于 2014-04-10T23:24:44.980 に答える
2

max はその時点以降にのみ使用可能になるため、まだ fetch を呼び出す必要があります。ドキュメントを参照してください: http://php.net/manual/en/mysqli-stmt.bind-result.php

$result->bind_result($max);

/* fetch values */
while ($result->fetch()) {
    printf("Max ID %i\n", $max);
}

$result->close();
于 2012-06-10T03:35:45.197 に答える