我正在使用MySQLi连接,我有以下代码,我正在尝试从数据库表中选择库存ID定义的行的所有列,但我无法使其工作。我这样做是完全错误的吗?我希望能够在选择查询后的代码中使用$row['general_cleanliness']
之类的内容。
$getScheduleCondition = $db->prepare("SELECT * FROM inventories WHERE inventory_id = ? LIMIT 1",)){
$getScheduleCondition->bind_param("i", $inventory);
$row = $getScheduleCondition->fetch_array();
$getScheduleCondition->close();
$inventory
被定义为一个数字,我知道这是有效的。任何帮助都表示赞赏,如果这看起来像是一个基本问题,那就太遗憾了!
编辑: 对于每个人都告诉我我正在使用PDO,我不是:
$db = new mysqli('localhost', 'cl52-system', 'PASS', 'cl52-system');
if($db->connect_errno > 0){
die('Unable to connect to database [' . $db->connect_error . ']');
}
答案 0 :(得分:0)
你忘记了两件事。首先,您需要执行查询。您可以使用your_stmt_object->execute()
(docs)执行此操作。您的stmt-object没有方法fetch_array()
,因此您首先需要使用mysqli_result
(docs)从->get_result()
中提取fetch_array()
然后您可以使用$getScheduleCondition = $db->prepare("SELECT * FROM inventories WHERE inventory_id = ? LIMIT 1");
$getScheduleCondition->bind_param("i", $inventory);
$getScheduleCondition->execute(); //You need to execute the query
$row = $getScheduleCondition->get_result()->fetch_array(); //From stmt to mysql_result to array
$getScheduleCondition->close();
如你所愿。
->fetch()
如果您不需要使用该数组,则可能更容易使用->bind_result()
(docs)和$getScheduleCondition = $db->prepare("SELECT * FROM inventories WHERE inventory_id = ? LIMIT 1");
$getScheduleCondition->bind_param("i", $inventory);
$getScheduleCondition->bind_result( $column1, $column2, $column3, $etc );
$getScheduleCondition->execute(); //You need to execute the query
$getScheduleCondition->fetch(); //Now the first row is in the variables defined above
echo $column1; //<-- see?
$getScheduleCondition->close();
(docs)。
{{1}}
答案 1 :(得分:-2)
您传递的参数被标识为“i”(命名参数),但在您的查询中只有?,将bind_param更改为“:i”并更改? to:i在你的查询中。
$getScheduleCondition = $db->prepare("SELECT * FROM inventories WHERE inventory_id = :i LIMIT 1",)){
$getScheduleCondition->bind_param(":i", $inventory, PDO::PARAM_INT);
$getScheduleCondition->execute(); // based on Sumurai8 comment, this is missing
$row = $getScheduleCondition->fetch_array();
$getScheduleCondition->close();
另外,PDO:PARAM_INT显式地将参数设置为整数。