试图学习用PHP编写的语句,但我无法让它工作

试图学习用PHP编写的语句,但我无法让它工作,php,sql,mysqli,prepared-statement,php-7,Php,Sql,Mysqli,Prepared Statement,Php 7,下面是我的函数listRecordsMatching($accNo),它连接到我的mySQL服务器,以匹配具有特定帐号的所有记录。我知道我的问题在于我编写SQL的方式 我的表具有以下结构:(int)id,(string)支票编号,(double)金额,(date)支票日期,(string)客户,(int)账户 注意:conn()是我的配置文件中的一个全局函数,它返回连接到我的服务器的mysqli对象 编辑:由于conn()函数会导致一些混乱: 我找到了答案。在执行$stmt->execute()

下面是我的函数listRecordsMatching($accNo),它连接到我的mySQL服务器,以匹配具有特定帐号的所有记录。我知道我的问题在于我编写SQL的方式

我的表具有以下结构:(int)id,(string)支票编号,(double)金额,(date)支票日期,(string)客户,(int)账户

注意:conn()是我的配置文件中的一个全局函数,它返回连接到我的服务器的mysqli对象

编辑:由于conn()函数会导致一些混乱:

我找到了答案。在执行$stmt->execute()之后,我必须将结果绑定到变量以使用它们$stmt->bind_结果($var1,$var2,…)

//创建连接
$conn=newmysqli($servername、$username、$password);
//检查连接
如果($conn->connect\u错误){
die(“连接失败:”.$conn->connect\U错误);
}
$GLOBALS['conn']=$conn;
函数conn(){
返回$GLOBALS['conn'];
}
函数列表记录匹配($accNo){
//准备报表
$stmt=conn()->prepare(“从`mfs支票应用程序`.`cheques`中选择*,其中`account`=?”;
$stmt->bind_参数('i',$accNo);
$stmt->execute();
$row=$stmt->fetch(PDO::fetch_ASSOC);
var_dump($row)//输出NULL
回声“1”;
while(true){
如果(!$行)中断;
$c=新支票($row['CHECK-no']、$row['amount']、$row['CHECK-date']、$row['customer']、$row['account']);
echo$c->list();//输出格式化的html
}
回声“2”;
}
输出>>>空值12

您正在使用两个不同的变量
$accNo
$account
…将其中一个变量更改为与另一个变量相匹配,它可能会开始工作。

您是正确的,我有一个输入错误。但是,在更改后,我运行代码后,没有任何更改。vardump是否仍然输出为空?像以前一样输出为空。您能否确认$accNo的值存在于表中?并确认$accNo有一个值。有时您传递了blank。您是否已手动将查询输入mySQL?通过这种方式,您可以测试您的查询是否实际返回任何内容。另外,确认account字段是整数类型。我这样做了,它返回了我想要的所有行。mySQL中的account字段是一个int,可以是-1、0、1、2或3。我认为在这里不需要():$stmt=conn()->preparewhy将其标记为mysqli?您还混合了不同的mySQL API,您不能这样做。
// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$GLOBALS['conn'] = $conn;
function conn(){
    return $GLOBALS['conn'];
}


function listRecordsMatching($accNo){
    //prepare statement
    $stmt = conn()->prepare("SELECT * FROM `mfs-cheque-app`.`cheques` WHERE `account` = ?");
    $stmt->bind_param('i', $accNo);
    $stmt->execute();
    $row=$stmt->fetch(PDO::FETCH_ASSOC);
    var_dump($row) // outputs NULL
    echo "<form id='records'>1";
    while(true){
        if (!$row) break;
        $c = new Cheque($row['cheque-no'],$row['amount'],$row['cheque-date'],$row['customer'],$row['account']);
        echo $c->list(); // outputs formatted html
    }
    echo "2</form>";
}
OUT>>> NULL<form id="records">12</form>