web-dev-qa-db-ja.com

mysqli_fetch_assoc()は、パラメーター1がmysqli_resultであり、ブール値が与えられることを期待します

可能性のある複製:
PHP:警告:sort()はパラメーター1が配列であり、リソースが与えられることを期待しています

私はPHPとMySQLが初めてで、これを理解することができません。フォーラム全体を検索しましたが、意味のある答えが見つかりませんでした。 mysql_fetch_assoc()を使用していましたが、数字しか検索できず、文字を検索する際にもエラーが発生しました。ここで正しい軌道に乗っていることを望みます。

$con = mysqli_connect($hostname,$username,$password) or die ("<script language='javascript'>alert('Unable to connect to database')</script>");
mysqli_select_db($con, $dbname);

if (isset($_GET['part'])){
    $partid = $_GET['part'];
    $sql = 'SELECT * 
        FROM $usertable 
        WHERE PartNumber = $partid';

    $result = mysqli_query($con, $sql);
    $row = mysqli_fetch_assoc($result);

    $partnumber = $partid;
    $nsn = $row["NSN"];
    $description = $row["Description"];
    $quantity = $row["Quantity"];
    $condition = $row["Conditio"];
}
9
user1504463

これは、結果が結果ではない場合に発生します(代わりに「false」)。この行を変更する必要があります

$sql = 'SELECT * FROM $usertable WHERE PartNumber = $partid';

これに:

$sql = "SELECT * FROM $usertable WHERE PartNumber = $partid";

なぜなら「」は「$ variables」を解釈できますが、「」はできないからです。

整数(数値)で正常に動作します。文字列の場合、次のように$ variableを単一引用符で囲む必要があります。

$sql = "SELECT * FROM $usertable WHERE PartNumber = '$partid' ";

単一引用符で作業する必要がある場合、phpは変数を解釈できません。次のように実行する必要があります。

 $sql = 'SELECT * FROM '.$usertable.' WHERE string_column = "'.$string.'" AND integer_column = '.$number.';
25
Sliq
mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given

これは、最初に渡したパラメーターがブール値(trueまたはfalse)であることを意味します。

最初のパラメーターは$result、およびクエリに構文エラーがあるため、falseです。

" ... WHERE PartNumber = $partid';"

SQLクエリにリクエスト変数を直接含めないでください。そうしないと、ユーザーはクエリにSQLを挿入できます。 ( SQLインジェクション を参照してください。)

変数をエスケープする必要があります。

" ... WHERE PartNumber = '" . mysqli_escape_string($conn,$partid) . "';"

または、 Prepared Statements

15
Arnaud Le Blanc

変数の代わりに変数テキストを作成しているSQLステートメントを単一引用符で囲んでいます。

$sql = "SELECT * 
    FROM $usertable 
    WHERE PartNumber = $partid";
4
johnmadrak

Mysqliはオブジェクト指向プログラミングを利用します。代わりにこのアプローチを使用してみてください。

function dbCon() {
        if($mysqli = new mysqli('$hostname','$username','$password','$databasename')) return $mysqli; else return false;
}

if(!dbCon())
exit("<script language='javascript'>alert('Unable to connect to database')</script>");
else $con=dbCon();

if (isset($_GET['part'])){
    $partid = $_GET['part'];
    $sql = "SELECT * 
        FROM $usertable 
        WHERE PartNumber = $partid";

    $result=$con->query($sql_query);
    $row = $result->fetch_assoc();

    $partnumber = $partid;
    $nsn = $row["NSN"];
    $description = $row["Description"];
    $quantity = $row["Quantity"];
    $condition = $row["Conditio"];
}

ご質問がある場合はお知らせください。このコードをテストできなかったため、3回チェックする必要があるかもしれません。

2
Ben Ashton

$usertableが有効なテーブルではないか、列PartNumberが含まれていないか、部分が数字ではありません。

ブール値を返す可能性があるため、$ partidをエスケープし、mysql_fetch_assoc()のドキュメントも読み取る必要があります。

0
TerryE