MySQL 查询未显示任何结果
No Results showing from MySQL Query
我有一个 table 名为“repairs”。在 table 里面,我有以下几行:
job_number (INT11) AUTO INCREMENT -> 这是客户在我正在构建的维修状态表中输入的数字...
日期 | client_full_name | item_for_repair | tech_assigned | technician_notes | current_status
整个过程应该首先检查客户输入表格的工作编号是否在数据库中,并根据数据库中的内容显示该工作编号的状态。如果他们输入的职位编号在数据库中不存在,或者他们输入错误,系统会提示他们没有找到记录消息...
<?php
if (isset($_POST['btn_get_status'])) {
// Connection code.
$options = [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new \PDO('mysql:host=localhost;port=3306;dbname=ecemscoz_ecemsapp;charset=utf8mb4', 'ecemscoz_ecemsapp', 'C3m3t3ry!@', $options);
// Prepared statement
$stmt = $pdo->prepare('SELECT * FROM repairs WHERE job_number=?');
$stmt->execute([$_POST['job_number']]);
$exists = $stmt->fetchColumn(); // either 1 or null
if ($exists) {
echo "Status for $job_number is currently $current_status";
} else {
echo 'No Record Found';
}
}
我现在面临的问题是,当我输入一个不在数据库中的数字时,它 returns else{ 未找到记录的语句....完美!
没有找到按预期工作的记录:
但是如果我输入一个确实存在的职位编号,它会在需要职位编号和当前状态的地方显示空白字段。
结果为空:
我真的很难理解我缺少什么或在哪里实施它。我的新 PDO 代码是改进还是变得更糟?
验证在查询本身中:
$stmt = $pdo->prepare('SELECT * FROM repairs WHERE job_number=?');
如果 returns 任何结果都存在。
您应该将 $exists = $stmt->fetchColumn();
更改为 $exists = $stmt->fetch();
存在时将有两种可能的状态:1) 如果没有工作则为空数组。 2) 一个数组,其中所有行和列都与该作业编号匹配。
然后你可以做一些像
if (empty($exists)) {
echo 'No Record Found';
} else {
echo "Status for {$exists['job_number']} is currently {$exists['current_status']}";
}
正如@Dharman 所说,您可以反转 if:
if ($exists) {
echo "Status for {$exists['job_number']} is currently {$exists['current_status']}";
} else {
echo 'No Record Found';
}
我有一个 table 名为“repairs”。在 table 里面,我有以下几行:
job_number (INT11) AUTO INCREMENT -> 这是客户在我正在构建的维修状态表中输入的数字...
日期 | client_full_name | item_for_repair | tech_assigned | technician_notes | current_status
整个过程应该首先检查客户输入表格的工作编号是否在数据库中,并根据数据库中的内容显示该工作编号的状态。如果他们输入的职位编号在数据库中不存在,或者他们输入错误,系统会提示他们没有找到记录消息...
<?php
if (isset($_POST['btn_get_status'])) {
// Connection code.
$options = [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new \PDO('mysql:host=localhost;port=3306;dbname=ecemscoz_ecemsapp;charset=utf8mb4', 'ecemscoz_ecemsapp', 'C3m3t3ry!@', $options);
// Prepared statement
$stmt = $pdo->prepare('SELECT * FROM repairs WHERE job_number=?');
$stmt->execute([$_POST['job_number']]);
$exists = $stmt->fetchColumn(); // either 1 or null
if ($exists) {
echo "Status for $job_number is currently $current_status";
} else {
echo 'No Record Found';
}
}
我现在面临的问题是,当我输入一个不在数据库中的数字时,它 returns else{ 未找到记录的语句....完美!
没有找到按预期工作的记录:
但是如果我输入一个确实存在的职位编号,它会在需要职位编号和当前状态的地方显示空白字段。
结果为空:
我真的很难理解我缺少什么或在哪里实施它。我的新 PDO 代码是改进还是变得更糟?
验证在查询本身中:
$stmt = $pdo->prepare('SELECT * FROM repairs WHERE job_number=?');
如果 returns 任何结果都存在。
您应该将 $exists = $stmt->fetchColumn();
更改为 $exists = $stmt->fetch();
存在时将有两种可能的状态:1) 如果没有工作则为空数组。 2) 一个数组,其中所有行和列都与该作业编号匹配。 然后你可以做一些像
if (empty($exists)) {
echo 'No Record Found';
} else {
echo "Status for {$exists['job_number']} is currently {$exists['current_status']}";
}
正如@Dharman 所说,您可以反转 if:
if ($exists) {
echo "Status for {$exists['job_number']} is currently {$exists['current_status']}";
} else {
echo 'No Record Found';
}