当我在phpmyadmin中运行以下查询时,我得到了18个结果 - 所有这些都是正确的,我正在寻找什么。但是,当我复制&将查询粘贴到php文件并运行页面,我得到17个结果。
SELECT
ta.jobTaskID,
jt.customTaskTitle, jt.taskID, jt.status,
d.dealershipName,
j.jobNumber, j.jobID, j.title, j.jobSpec,
wt.taskName,
po.dueToProduction
FROM taskassignments ta
INNER JOIN jobTasks jt ON ta.jobTaskID = jt.jobTaskID
INNER JOIN jobs j ON jt.jobID = j.jobID
INNER JOIN dealerships d ON j.dealershipID = d.dealershipID
LEFT JOIN workflowtasks wt ON jt.taskID = wt.taskID
LEFT JOIN purchaseorders po ON j.jobID = po.jobID
WHERE ta.userID = 1 AND jt.status != 'Completed';
编辑:Here's a snapshot of my phpmyadmin result 和here's a snapshot of my var_dump。
这是我的PHP代码(我使用的是我创建的数据库类)
$myTasks = $connection->runQuery("
SELECT
ta.jobTaskID,
jt.customTaskTitle, jt.taskID, jt.status,
d.dealershipName,
j.jobNumber, j.jobID, j.title, j.jobSpec,
wt.taskName,
po.dueToProduction
FROM taskassignments ta
INNER JOIN jobTasks jt ON ta.jobTaskID = jt.jobTaskID
INNER JOIN jobs j ON jt.jobID = j.jobID
INNER JOIN dealerships d ON j.dealershipID = d.dealershipID
LEFT JOIN workflowtasks wt ON jt.taskID = wt.taskID
LEFT JOIN purchaseorders po ON j.jobID = po.jobID
WHERE ta.userID = " . $userID . " AND jt.status != 'Completed'");
最后,这是连接类用于运行查询的代码:
// runs the user defined query
public function runQuery($runMe)
{
$outArray = array();
if ($this->checkConnection()) // if the connection is a resource
{
$returned = mysql_query($runMe, $this->dbConnection);
if ($returned === false) // if there was an error during sql execution
{
echo "SQL Query error: " . mysql_error();
}
if ($returned === true) // if a update, insert, delete, etc... command was run
return true;
if (is_resource($returned))
{
$outArray = array(); // returned array with query results
for ($i = 0; $i < mysql_num_rows($returned); $i++)
{
$outArray[] = mysql_fetch_assoc($returned);
}
}
if (count($outArray) < 1)
return null;
else
return $outArray;
}
else
echo "Your Database Connection Was Unable To Be Authenticated.";
}
答案 0 :(得分:1)
更好的解决方案是不要在所有中使用mysql_num_rows()
,而只是反复调用mysql_fetch_assoc()
,直到它停止返回结果:
$outArray = array();
while ( $row = mysql_fetch_assoc($returned) ) {
$outArray[] = $row;
}
(请注意。您知道,您的代码正在使用的original PHP mysql API自PHP 5.5.0起已弃用,将在以后的某个版本中删除。您真的应该转移到{{3} },one of the supported APIs或mysqli。)
答案 1 :(得分:0)
尝试替换此行:
for ($i = 0; $i < mysql_num_rows($returned); $i++)
使用:
for ($i = 0; $i < mysql_num_rows($returned) + 1; $i++)
答案 2 :(得分:0)
您的最后一行被跳过,因为您只是检查$i
是否小于mysql_num_rows($returned)
。你应该检查它是否小于或等于。
因此您需要更改以下行:
for ($i = 0; $i < mysql_num_rows($returned); $i++)
到
for ($i = 0; $i <= mysql_num_rows($returned); $i++)
然后,您将按照预期将所有数据返回到PHP。
答案 3 :(得分:0)
尝试通过在循环后调用unset函数来清除循环内使用的所有数组,以清除所有数组,如
while(){
//your code
}
unset(array);
这将解决你的问题,因为它解决了我的问题。