PHP变量在查询中不求值[重复]

qyswt5oh  于 2022-12-21  发布在  PHP
关注(0)|答案(5)|浏览(109)
    • 此问题在此处已有答案**:

How to include a PHP variable inside a MySQL statement(6个答案)
5年前关闭。
我是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"];
}
c9qzyr3d

c9qzyr3d1#

当你的结果不是一个结果(而是一个“false”)时,就会发生这种情况。

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

$stmt = $con->prepare($sql);
$stmt->bind_param("s", $partid);
$stmt->execute();
$result = $stmt->get_result();
$row = mysqli_fetch_assoc($result);

因为不应该直接在SQL中添加数据变量,而应该使用占位符。由于占位符不能用于表名,因此将其作为变量通常是一个坏主意,因此按原样编写即可。

a8jjtwal

a8jjtwal2#

mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given

这意味着您传递的第一个参数是布尔值(true或false)。
第一个参数是$result,之所以是false是因为查询中存在语法错误。

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

您不应该直接在SQL查询中包含请求变量,否则用户可以在您的查询中插入SQL。(参见SQL injection
应转义变量:

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

或者更好的方法是使用Prepared Statements

gblwokeq

gblwokeq3#

您将SQL语句用单引号括起来,使变量成为文本而不是变量。

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

vybvopom4#

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

让我知道,如果你有任何问题,我不能测试这个代码,所以你可能需要三重检查它!

1aaf6o9v

1aaf6o9v5#

如果$usertable不是有效的表或不包含PartNumber列或part不是数字,代码中会发生什么。
您必须对$partid进行转义,并且还要读取mysql_fetch_assoc()的文档,因为它可以返回布尔值

相关问题