将单个SQL SELECT语句查询结果分配给PHP变量


Assign a Single SQL SELECT Statement query result to a PHP Variable

嗨,我有一个网站,在一个汽车品牌,并产生一个汽车Id结果对应于一个数据库。虽然有许多可用于将sql查询结果存储到变量的解决方案,但在这种情况下,它似乎不起作用。

我已经在数据库中尝试了sql语句,它的工作与1个结果输出是正确的。

<?php 
session_start();
include "dbconn.php";

$carcat = $_SESSION['selectedcarcat'];
$carbrand = $_POST['carbrand'];
$userid = $_SESSION['loginid'];
$username = $_SESSION['loginname'];
$startdate = $_POST['date1'];
$enddate = $_POST['date2'];
$pick = $_POST['pickuploc'];
$return = $_POST['returnloc'];
$calqty = 0;

    $selcaridsql = "SELECT carid FROM cars WHERE brand='$carbrand' ";
    $caridresult = $dbcnx->query($selcaridsql);
    $caridrow = mysql_fetch_object($caridresult);
    $carid = $caridrow['carid'];
    if (!$caridresult) 
    {
        $errmessage = "Your carid select query failed.";
        echo "<script type='text/javascript'>alert('$errmessage');</script>";
    }

    echo '<br>Debug 1 ';
    echo '<br>The selected qty is '
        .$qtyresult1.'<br />';
    echo '<br>The calculated qty is '
        .$calqty.'<br />';
    echo '<br>The content carid is '
        .$carid.'<br />';
    echo '<br>The content userid is '
        .$userid.'<br />';
    echo '<br>The content start is '
        .$startdate.'<br />';
    echo '<br>The content end is '
        .$enddate.'<br />';
    echo '<br>The content pick is '
        .$pick.'<br />';
    echo '<br>The content return is '
        .$return.'<br />';
        echo '<br>The content carbrand is '
        .$carbrand.'<br />';
?>

错误发生,在"Content card is"处显示空白结果。经过论坛,似乎变量$carid没有价值,我可能已经推断错误。

返回结果:

Debug 1 
The selected qty is 
The calculated qty is 0
The content carid is 
The content userid is 
The content start is 2016-10-28
The content end is 2016-10-29
The content pick is jurong
The content return is bishan
The content carbrand is Honda

显然,在使用var_dump调试Chris所述的问题之后,问题被缩小到由mysql_fetch_object($caridresult);收集的NULL值。由于DB连接利用@$dbcnx = new mysqli('localhost','values','values','values');, DB类对于检索数组值是错误的。因此,解为mysqli_fetch_array

这些代码可能对那些尝试调试的人有帮助:

<?php // register.php
session_start();
include "dbconn.php";
$carcat = $_SESSION['selectedcarcat'];
$carbrand = $_POST['carbrand'];
$userid = $_SESSION['loginid'];
$username = $_SESSION['loginname'];
$startdate = $_POST['date1'];
$enddate = $_POST['date2'];
$pick = $_POST['pickuploc'];
$return = $_POST['returnloc'];
$calqty = 0;
    $selcaridsql = "SELECT carid FROM cars WHERE brand='$carbrand' ";
    
    echo $selcaridsql."<br>";
    $caridresult = $dbcnx->query($selcaridsql);
    echo "<br>".var_dump($caridresult);
    if ($caridresult->num_rows >0 )
      {
        // if they are in the database register the user id
        echo '<br>Hello more than 1 <br>';  
      }
    else
    {
        echo '<br>Hello less than 1 <br>';
    }
    $caridrow = mysqli_fetch_array($caridresult);
    echo var_dump($caridrow)."<br>"; 
    $carid = $caridrow['carid'];
    echo var_dump($carid)."<br>"; 
    
    if (!$caridresult) 
    {
        $errmessage = "Your carid select query failed.";
        echo "<script type='text/javascript'>alert('$errmessage');</script>";
    }
    echo '<br>Debug 1 ';
    echo '<br>The selected qty is '
        .$qtyresult1.'<br />';
    echo '<br>The calculated qty is '
        .$calqty.'<br />';
    echo '<br>The content carid is '
        .$carid.'<br />';
    echo '<br>The content userid is '
        .$userid.'<br />';
    echo '<br>The content start is '
        .$startdate.'<br />';
    echo '<br>The content end is '
        .$enddate.'<br />';
    echo '<br>The content pick is '
        .$pick.'<br />';
    echo '<br>The content return is '
        .$return.'<br />';
        echo '<br>The content carbrand is '
        .$carbrand.'<br />';
?>

特别感谢Chris帮忙找到错误!

我现在没有能力测试这个。

但是,您已经确认$carid没有值(为null)。

并且您已经确认SQL语句在对数据库运行时返回正确的值。因此,一个可能的问题是您用代码发送给数据库的查询。

查询:

$selcaridsql = "SELECT carid FROM cars WHERE brand='$carbrand' ";

我的建议修复你的查询:

$selcaridsql = "SELECT carid FROM cars WHERE brand='" + $carbrand + "'";

你可以发送字符串字面量" $carbrand ",而不知道它,除非你打印出SQL语句来检查。

你试过吗?

另外,请检查所有$_POST的值,以确保它们是您认为的。这对安全也是非常重要的。

找到那些println语句并告诉我你找到了什么:-)。

打印出来,确保你的值是你所期望的。

我99%肯定这就是问题所在。