gpt4 book ai didi

PHP MySQLI 选择多列返回 null

转载 作者:行者123 更新时间:2023-12-01 00:40:51 25 4
gpt4 key购买 nike

我正在尝试使用以下准备好的语句从我的数据库中检索 2 列:

$statement = $conn->prepare("SELECT script, work_instruction FROM ".$table." WHERE category='".$category."' AND sub_category='".$sub_category."' AND issue='".$issue."'");

每当我使用此查询时,PHP 都会将 null 返回到我的网页,即使数据存在于数据库中也是如此。但是,以下语句确实有效(与 work_instruction 相同):

$statement = $conn->prepare("SELECT script FROM ".$table." WHERE category='".$category."' AND sub_category='".$sub_category."' AND issue='".$issue."'");

一旦我准备好我执行的语句并循环遍历我的结果,然后返回它们。我认为问题可能出在这里,但不确定。

$statement->execute();
$statement->bind_result($results);

while($statement->fetch()){
array_push($myArr, $results);
}

$statement->free_result();
echo json_encode($myArr);


这是我的表格的示例: enter image description here


这里是整个函数,以备不时之需:

// Responsible for generating queries to the database
// and returning the data collected
function query($conn, $column) {
$myArr = array();
$table = $_POST['table'];
$category = $_POST['category'];
$sub_category = $_POST['sub_category'];
$issue = $_POST['issue'];

switch ($column) {
case 'category':
$statement = $conn->prepare("SELECT DISTINCT category FROM ".$table);
break;

case 'sub_category':
$statement = $conn->prepare("SELECT DISTINCT sub_category FROM ".$table." WHERE category='".$category."'");
break;

case 'issue':
$statement = $conn->prepare("SELECT DISTINCT issue FROM ".$table." WHERE category='".$category."' AND sub_category='".$sub_category."'");
break;

//This does not work
case 'script':
$statement = $conn->prepare("SELECT script, work_instruction FROM ".$table." WHERE category='".$category."' AND sub_category='".$sub_category."' AND issue='".$issue."'");
break;

//This does work
case 'work_instruction':
$statement = $conn->prepare("SELECT work_instruction FROM ".$table." WHERE category='".$category."' AND sub_category='".$sub_category."' AND issue='".$issue."'");
break;

case 'doc_link':
//$statement = $conn->prepare($query);
break;

default:
break;
}
$statement->execute();
$statement->bind_result($results);

while($statement->fetch()){
array_push($myArr, $results);
}

$statement->free_result();
echo json_encode($myArr);

}

最佳答案

我没有发现您的代码在语法方面存在问题。但是您可能想要更改将参数传递给准备好的语句的方式。您当前使用的方法是不安全的,您实际上根本没有获得使用准备好的语句的好处。

试试下面的代码看看你的问题是否解决了。我认为这应该有效,除非您传递的值有问题。在这里我假设你所有的参数都是字符串。如果它是整数,您可以将 bind_param 中的“s”更改为“i”。

<?php
$statement = $conn->prepare("SELECT script, work_instruction FROM {$table} WHERE category = ? AND sub_category = ? AND issue= ?");
$statement->bind_param('sss', $category, $sub_category, $issue); // s = string
$statement->execute();

$results = $statement->get_result();
while($row = $results->fetch_array(MYSQLI_ASSOC)) {
array_push($myArr, $row);
}

echo json_encode($myArr);

关于PHP MySQLI 选择多列返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32612814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com