Mysql – thesql_query expected

datetimeMySQL

currently I'm getting the error stated above using thise code:

$Tijd = date_create($_POST ["Tijd"]);
$Tijd->format(\DateTime::ISO8601);

$result = mysql_query ("SELECT Voorstellingsnummer FROM voorstelling v WHERE Tijd = '$Tijd' AND v.Voorstellingsnummer NOT IN(SELECT r.Voorstellingsnummer FROM reserveringen r WHERE r.Voorstellingsnummer = v.Voorstellingsnummer GROUP BY r.Voorstellingsnummer HAVING COUNT(*) >= 50) AND Vestigingsnaam = '" . $_SESSION["geselecteerdvestiging"] . "' AND Filmnaam = '" . $_SESSION["geselecteerdfilmnaam"] . "';", $db);

Object of class DateTime could not be converted to string

the error happens in the $result = etc…

Full error:
Catchable fatal error: Object of class DateTime could not be converted to string in E:\xampplite\htdocs\havo5groep2\reserveren.php on line 60

I use this form to get the post data

                            echo "<form action='reserveren.php' method='post'>
                            <H3>Kies een Tijd</H3><br>
                            <select name='Tijd'> ";
                        while ($row = mysql_fetch_array($_SESSION["Tijd"])) {
                            echo "<option value='" . $row['Tijd'] ."'>" . $row['Tijd'] ."</option>";
                        }
                        echo "</select>
                            <input type='submit' name='Reserveer' value='Reserveren'>
                            </form>";

I get the values from $row from the following query:

        $resultaat = mysql_query ("SELECT Tijd FROM voorstelling v WHERE v.Voorstellingsnummer NOT IN(SELECT r.Voorstellingsnummer FROM reserveringen r WHERE r.Voorstellingsnummer = v.Voorstellingsnummer GROUP BY r.Voorstellingsnummer HAVING COUNT(*) >= 50) AND Vestigingsnaam = '" . $_SESSION["geselecteerdvestiging"] . "' AND Filmnaam = '" . $_SESSION["geselecteerdfilmnaam"] . "';", $db);
    $_SESSION["Tijd"] = $resultaat;

the value of Tijd in the select are all datetime records.

So my question is how do I succesfully get the value form the select form to convert into a timedate that I can use in my query

Best Answer

As has been intimated in the comments quite possibly is not a database isue, in fact the error you are receiving is generated from PHP.

The error is caused by a slight misunderstanding of what datetime->format() does.

This does not change the format the date and time is stored in rather it returns the date and time in that format immediately (datetime->format() documentation)

To correct this in your code you need to capture the result of "$Tijd->format(\DateTime::ISO8601);" in another variable such as:

$Tijd = date_create($_POST ["Tijd"]);
$formattedTime = $Tijd->format(\DateTime::ISO8601);

You can then use this in the SQL such:

$result = mysql_query (
      "SELECT Voorstellingsnummer
      FROM voorstelling v
      WHERE Tijd = '$formattedTime' AND
      v.Voorstellingsnummer NOT IN(
         SELECT r.Voorstellingsnummer
         FROM reserveringen r
         WHERE r.Voorstellingsnummer = v.Voorstellingsnummer
         GROUP BY r.Voorstellingsnummer
         HAVING COUNT(*) >= 50
      ) AND
      Vestigingsnaam = '" . $_SESSION["geselecteerdvestiging"] . "' AND
      Filmnaam = '" . $_SESSION["geselecteerdfilmnaam"] . "';",
   $db
);