[php/mysql] Commands out of sync; you can't run this command

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
In PHP krijg ik de volgende foutmelding van MySQL bij het gebruik van een procedure:
Commands out of sync; you can't run this command now
Dit gebeurt pas bij de tweede keer dat de procedure wordt aangeroepen. Mijn idee is dat dit komt doordat de procedure twee dingen teruggeeft:
mysql> CALL load_shift('2007-02-16', 1);
Empty set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)
Je ziet hier een 'Empty set (0.00 sec)' en een 'Query OK...' melding. Zou het kunnen dat MySQL het resultaat van de query in de procedure als een result ziet en het resultaat van de procedure als een ander? Dat zou het probleem in PHP verklaren, omdat ik maar 1 resultset ophaal en leeg met mysql_free_result() .

Ik zou dus die tweede resultset moeten ophalen en legen om de procedure vaker te kunnen aanroepen. Hoe kan ik dit doen? Een mysql_query werkt niet, omdat ik die set wil ophalen zonder een nieuwe query op te geven (want dat geeft toch alleen een error).

Ik ontken het bestaan van IE.


Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

Doe je tussen die 2 aanroepen ergens een mysql_use_result() of mysql_store_result() ?

Acties:
  • 0 Henk 'm!

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
igmar schreef op dinsdag 20 februari 2007 @ 13:21:
Doe je tussen die 2 aanroepen ergens een mysql_use_result() of mysql_store_result() ?
Nope. Het enige wat ik met de resultaten doe is een mysql_fetch_object. Ik zie geen 'free' functie staan voor deze objecten, dus ik neem aan dat dat niet van toepassing is.

EDIT: Het probleem zit zonder twijfel bij de procedure. Als ik precies dezelfde query genereer als de procedure aanroept en die in PHP gebruik werkt het wel. Het gaat dus toch mis omdat de procedure iets anders terugstuurt dan de directe query.

[ Voor 25% gewijzigd door cyberstalker op 20-02-2007 13:28 ]

Ik ontken het bestaan van IE.


  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
*schop*

Weet iemand hoe ik die tweede resultset ophaal in PHP zonder een nieuwe query te versturen?

Ik ontken het bestaan van IE.


  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

Zonder te weten wat die stored procedure inhoud wordt het moeilijk denk ik? :)

God, root, what is difference? | Talga Vassternich | IBM zuigt


  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
moto-moi schreef op donderdag 22 februari 2007 @ 12:03:
Zonder te weten wat die stored procedure inhoud wordt het moeilijk denk ik? :)
Ik denk niet dat dat relevant is, het probleem zit hem niet in de query die de procedure doet, maar hier komt het:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
CREATE PROCEDURE `load_shift`
(
        input_date date,
        shift_id int(8) unsigned
)
BEGIN
        (
                SELECT
                        person.pid                                              AS      person_id,
                        person.firstname                                        AS      name_first,
                        person.suffix                                           AS      name_suffix,
                        person.lastname                                         AS      name_last,
                        planning_extra_shifts.remark                            AS      plan_remark,
                        planning_canceled_extra_shifts.planned_out              AS      planned_out,
                        planning_canceled_extra_shifts.late                     AS      late,
                        planning_canceled_extra_shifts.no_show                  AS      no_show,
                        planning_canceled_extra_shifts.remark                   AS      cancel_remark,
                        planning_canceled_extra_shifts.insert_time              AS      insert_time,
                        user.username                                           AS      insert_user,
                        1                                                       AS      shift_type
                FROM
                        planning_extra_shifts
                LEFT JOIN
                (
                        planning_canceled_extra_shifts,
                        user
                )
                ON
                        planning_canceled_extra_shifts.fk_pes_id                =       planning_extra_shifts.id        AND
                        planning_canceled_extra_shifts.fk_userid                =       user.uid
                JOIN
                        person
                ON
                        person.pid                                              =       planning_extra_shifts.fk_pid
                WHERE
                        planning_extra_shifts.work_date                         =       input_date                      AND
                        planning_extra_shifts.fk_ps_id                          =       shift_id
        )
        UNION
        (
                SELECT
                        person.pid                                              AS      person_id,
                        person.firstname                                        AS      name_first,
                        person.suffix                                           AS      name_suffix,
                        person.lastname                                         AS      name_last,
                        planning_regular_shifts.remark                          AS      plan_remark,
                        planning_canceled_regular_shifts.planned_out            AS      planned_out,
                        planning_canceled_regular_shifts.late                   AS      late,
                        planning_canceled_regular_shifts.no_show                AS      no_show,
                        planning_canceled_regular_shifts.remark                 AS      cancel_remark,
                        planning_canceled_regular_shifts.insert_time            AS      insert_time,
                        user.username                                           AS      insert_user,
                        0                                                       AS      shift_type
                FROM
                        planning_regular_shifts
                LEFT JOIN
                (
                        planning_canceled_regular_shifts,
                        user
                )
                ON
                        planning_canceled_regular_shifts.fk_prs_id              =       planning_regular_shifts.id      AND
                        planning_canceled_regular_shifts.work_date              =       input_date                      AND
                        planning_canceled_regular_shifts.fk_userid              =       user.uid
                JOIN
                        person
                ON
                        person.pid                                              =       planning_regular_shifts.fk_pid
                WHERE
                        planning_regular_shifts.day                             =       DAYOFWEEK(input_date)           AND
                        planning_regular_shifts.fk_ps_id                        =       shift_id
        )
        ORDER BY
                no_show,
                late,
                planned_out,
                shift_type,
                name_first,
                name_suffix,
                name_last;
END


Als ik de query direct in de code prak werkt het wel, de query is dus in orde.

Ik ontken het bestaan van IE.

Pagina: 1