使用mysqli从mysql中获取一个值失败

时间:2015-08-02 15:43:16

标签: php mysqli

我想使用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中给出的布尔值

是什么导致我的代码无法正常工作?。

2 个答案:

答案 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));
   }

http://www.w3schools.com/php/func_mysqli_error.asp