这是我试图在一些php PDO代码中使用的SQL查询:
SELECT SUM(credit_hours) AS hours FROM(SELECT Course_List.credit_hours FROM Program_Courses, Course_List
WHERE program_id= :pid and concentration_id= :conid
and fulfills_major=1 and Program_Courses.course_id = Course_List.course_id ) AS major_credits
当我在SQL Workbench中对我的数据库运行此查询时,我得到一个派生表,其中包含一个名为的列 “小时”和单行,其值为76。
这是我用来尝试将相同的数据存储在变量$ major_hours中的PHP代码:
$result = $conn->prepare("SELECT * FROM students WHERE username = :un");
$result->bindParam(':un',$user);
$result->execute();
$data = $result->fetch(PDO::FETCH_ASSOC); //returns an associated array where the indices are the column names
$program = $data['program_id'];
$concentration = $data['concentration_id'];
//get the total number of credit hours in the student's major/concentration
$result = $conn->prepare("SELECT SUM(credit_hours) AS hours FROM(
SELECT Course_List.credit_hours FROM Program_Courses, Course_List
WHERE program_id= :pid and concentration_id= :conid
and fulfills_major=1 and Program_Courses.course_id = Course_List.course_id
) AS major_credits");
$result->bindParam(':pid',$program);
$result->bindParam(':conid',$concentration);
$result->execute();
$major_hours = $result->fetchColumn();
我知道变量$ user,$ program和$ concentration都有合法的值,因为当我回应那些页面时,我得到了正确的结果。然而,回应$ major_hours绝对没有。我做错了什么?
答案 0 :(得分:0)
我没有使用过sql workbench,但你可能想在SUM(credit_hours)表达式上使用isnull()或coalesce()。我认为这会导致$ major_hours显示为0。
答案 1 :(得分:0)
使用fetch,因为您可能会猜到它从结果集中获取下一行
fetch_style参数确定PDO
返回行的方式,在您的情况下FETCH_ASSOC
将是一个好的,因为它返回由结果集中返回的列名索引的数组。
$row = $result->fetch(PDO::FETCH_ASSOC);//row is an associative array
$major_hours = $row['hours']; //access the column name hour
echo $majors_hours; //will print the hour value from db
答案 2 :(得分:-1)
使用此
$major_hours = $result->fetch(PDO::FETCH_ASSOC);
echo $majors_hours['hours'];
有两种方法可以从数据库中返回数据。 fetch(PDO::FETCH_ASSOC)
和fetchAll(PDO::FETCH_ASSOC)
。 Fetch只从数据库中返回1行..但fetchAll将返回您所做的数据库查询中的所有行。
而(PDO::FETCH_ASSOC)
意味着将使用数组返回数据。