我目前正在使用PDO在MySQL表上进行选择,并让我打印结果,这在终端中是正确的。
我试图应用' while'循环到它,从odbc数据库中选择记录,其中第一个查询中的order_id
等于第二个查询中的invnoc
。我认为我的问题是如何调用order_id
并在DB2部分中执行语句。
如果我这样做:
$ordStatSql = 'SELECT order_id, order_status, is_placement, date_updated
FROM order_status';
try{
$ordStat = $MysqlConn->prepare($ordStatSql);
$result = $ordStat->execute();
}
catch(PDOException $ex)
{
echo "QUERY FAILED!: " .$ex->getMessage();
}
while($row = $ordStat->fetch(PDO::FETCH_ASSOC))
{
echo $row['order_id'] . $row['order_status'] . $row['is_placement'] . $row['date_updated'] . "\n";
}
它运行正常,没有错误,并打印出我预期的每一行。
但是完整的脚本:
$ordStatSql = 'SELECT order_id, order_status, is_placement, date_updated
FROM order_status';
try{
$ordStat = $MysqlConn->prepare($ordStatSql);
$result = $ordStat->execute();
}
catch(PDOException $ex)
{
echo "QUERY FAILED!: " .$ex->getMessage();
}
while($row = $ordStat->fetch(PDO::FETCH_ASSOC))
{
echo $row['order_id'] . $row['order_status'] . $row['is_placement'] . $row['date_updated'] . "\n";
$detailStatCheck = '
SELECT
invnoc as INVOICE,
fstatc as STATUS,
cstnoc AS DEALER,
framec AS FRAME,
covr1c AS COVER,
colr1c AS COLOR ,
extd2d AS SHIPDATE,
orqtyc AS QUANTITY
FROM GPORPCFL
WHERE invnoc IN ?
ORDER BY invnoc asc
';
try{
$detailCheck = $DB2conn->prepare($detailStatCheck);
$detailRslt = $detailCheck->execute(['order_id']);
$count2 = $detailCheck->rowcount();
}
catch(PDOException $ex)
{
echo "QUERY FAILED!: " .$ex->getMessage();
}
}
echo "Matches:" . $count2
它打印相同的order_id数字,显然需要更长时间,但匹配显示-1。我知道它拉动匹配因为我手动运行并匹配每条记录。我想知道我是否错误地循环,或者它归结为PDO错误。
非常感谢任何帮助。
答案 0 :(得分:1)
您的查询工作正常(除了其他答案/评论所说的)。您的问题实际上是在ODBC数据库的rowCount()
查询上使用SELECT
。来自the manual:
使用odbc_num_rows()确定SELECT之后可用的行数将返回-1并包含许多驱动程序。
因此,如果您需要计数,则需要选择COUNT(*)
作为字段,然后查看值:
while($row = $ordStat->fetch(PDO::FETCH_ASSOC))
{
echo $row['order_id'] . $row['order_status'] . $row['is_placement'] . $row['date_updated'] . "\n";
$detailStatCheck = '
SELECT
COUNT(*)
FROM GPORPCFL
WHERE invnoc = ?
';
try {
$detailCheck = $DB2conn->prepare($detailStatCheck);
$detailRslt = $detailCheck->execute(['order_id']);
$count2 = $detailCheck->fetch()[0]; // <---- correct count
}
catch(PDOException $ex)
{
echo "QUERY FAILED!: " .$ex->getMessage();
}
}