我想使用mysqli从mysql中获取单个值但是我的代码没有为我获取值。这是我的代码
<?php
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "my_journals";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$stock_type = 'vehicle_certificates';
$old_amount = mysqli_fetch_assoc(mysqli_query($conn,'SELECT amount FROM stock WHERE stock_type='."$stock_type".' limit 1'));
$newer_amount = $old_amount['amount'];
echo $newer_amount;
mysqli_close($conn);
?>
我收到此错误
警告:mysqli_fetch_assoc()期望参数1为mysqli_result, 第16行的C:\ wamp \ www \ journals_debug.php中给出的布尔值
是什么导致我的代码无法正常工作?。
答案 0 :(得分:3)
查询进入db时没有引号。
'SELECT amount FROM stock WHERE stock_type='."$stock_type".' limit 1'
应该是
'SELECT amount FROM stock WHERE stock_type="'.$stock_type.'" limit 1'
目前,当它到达数据库时,它是:
SELECT amount FROM stock WHERE stock_type=vehicle_certificates limit 1
我认为会抛出一个1064,但你没有看到,因为没有检查返回。
您需要封装引号,否则PHP会处理它们。
如果该值不是静态的,那么可以打开SQL注入。你应该使用准备好的陈述。
第三种方法可能是
"SELECT amount FROM stock WHERE stock_type='$stock_type' limit 1"
作为准备好的陈述http://php.net/manual/en/mysqli.quickstart.prepared-statements.php,这可能是:
$conn->prepare("SELECT amount FROM stock WHERE stock_type=? limit 1");
$stmt->bind_param("s", $stock_type);
$stmt->execute();
使用准备好的方法,您无需担心正确引用输入。这是自动处理的。
答案 1 :(得分:1)
我会做类似的事情:
$ results = mysqli_query ..
然后使用它来获取错误:
if (!$result) {
echo("Error description: " . mysqli_error($conn));
}