14

我对 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"];
}
4

5 回答 5

30

当您的结果不是结果(而是“假”)时,就会发生这种情况。你应该改变这一行

$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.';
于 2012-07-05T15:50:54.047 回答
15
mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given

这意味着您传递的第一个参数是布尔值(真或假)。

第一个参数是$result, 是false因为查询中有语法错误。

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

您永远不应该在 SQL 查询中直接包含请求变量,否则用户可以在您的查询中注入 SQL。(请参阅SQL 注入。)

您应该转义变量:

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

或者更好的是,使用Prepared Statements.

于 2012-07-05T15:51:17.527 回答
3

您正在单引号引用使变量变为文本而不是变量的 SQL 语句。

$sql = "SELECT * 
    FROM $usertable 
    WHERE PartNumber = $partid";
于 2012-07-05T15:50:35.987 回答
1

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"];
}

如果您有任何问题,请告诉我,我无法测试此代码,因此您可能需要对其进行三次检查!

于 2012-07-05T15:56:49.363 回答
0

如果$usertable不是有效表或不包含列 PartNumber 或 part 不是数字,代码中会发生什么。

您必须转义 $partid 并阅读 mysql_fetch_assoc() 的文档,因为它可以返回布尔值

于 2012-07-05T15:51:40.280 回答