PHP/MySQL: Krijg variabelen niet in MySQL querywerkend.

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • toxict
  • Registratie: September 2001
  • Laatst online: 16-10 18:00
Ik probeer een query te bouwen, zodat ik vanuit PHP een mySQL database kan query-en.
De bedoeling is dus dat de "resultaten" van de 2 variabelen hieronder in de query daaronder terecht komen.

$date_yesterday_last_row = date('Y-m-d H:i:s', strtotime('today'));
$date_yesterday_first_row = date('Y-m-d H:i:s', strtotime('yesterday'));

$sql_001 = "SELECT MAX(p1_meterreading_in_1) FROM p1_log WHERE p1_timestamp BETWEEN $date_yesterday_first_row AND $date_yesterday_last_row;";

Op een of andere manier komen de resultaten niet in de query terecht.
Als ik de query direct uitvoer met 2 data in de TIMESTAMP format, dan krijg ik direct en goed resultaat....mijn conclusie...de query is goed...alleen de variabelen er goed in krijgen niet.

Wie helpt mij?

http://www.pvoutput.org/intraday.jsp?sid=31923


Acties:
  • 0 Henk 'm!

  • Onoffon
  • Registratie: April 2006
  • Laatst online: 23:02
Probeer eens aanhalingstekens rond de variabelen te zetten, dus:

$sql_001 = "SELECT MAX(p1_meterreading_in_1) FROM p1_log WHERE p1_timestamp BETWEEN '$date_yesterday_first_row' AND '$date_yesterday_last_row';";

Just a simple thought....


Acties:
  • 0 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 06:54
Ik deed het zo:
PHP:
1
2
3
    $SQL = "INSERT INTO p1.readings (id, time, laag_tarief, hoog_tarief, huidig_verbruik, gas) 
VALUES (NULL, NULL, '".$mEVLT."', '".$mEVHT."', '".$mEAV."', '".$mG."')";     
mysql_query($SQL);


Misschien heb je wat aan mijn code: ThinkPad's TweakBlog: Uitlezen van de slimme meter P1-poort met een Arduino en waarden opslaan in MySQL-database (gebruik het nu niet meer overigens, vervangen door een Raspberry met Domoticz).

P.s. gebruik [code=php]<hier_code> [ /code] om je regels code leesbaarder te maken ;)

[ Voor 6% gewijzigd door ThinkPad op 02-02-2015 21:47 ]


Acties:
  • 0 Henk 'm!

  • Aionicus
  • Registratie: Februari 2011
  • Laatst online: 08-08-2023
Stap 1 zou zijn om even te kijken naar wat je krijgt als je $sql_001 echo'd

laat hij daar in de query al wel de waardes goed zien ? zo ja dan is het gewoon even simpel escapen en dan zou het moeten werken. als hij daar al de waardes niet goed neer zet dan heb je een quotje verkeerd staan.

Acties:
  • 0 Henk 'm!

  • toxict
  • Registratie: September 2001
  • Laatst online: 16-10 18:00
ThinkPadd schreef op maandag 02 februari 2015 @ 21:46:
Ik deed het zo:
PHP:
1
2
3
    $SQL = "INSERT INTO p1.readings (id, time, laag_tarief, hoog_tarief, huidig_verbruik, gas) 
VALUES (NULL, NULL, '".$mEVLT."', '".$mEVHT."', '".$mEAV."', '".$mG."')";     
mysql_query($SQL);


Misschien heb je wat aan mijn code: ThinkPad's TweakBlog: Uitlezen van de slimme meter P1-poort met een Arduino en waarden opslaan in MySQL-database (gebruik het nu niet meer overigens, vervangen door een Raspberry met Domoticz).

P.s. gebruik [code=php]<hier_code> [ /code] om je regels code leesbaarder te maken ;)
Ik krijg bij het lezen van " INSERT INTO" het idee dat ik waardes in een tabel ga plaatsen.
Mijn bedoeling is om middels variabelen een query te bouwen om juist iets uit te lezen...
Zie ik dit goed of heb ik het mis?

http://www.pvoutput.org/intraday.jsp?sid=31923


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ik zou dat voorbeeld vermijden, mysql_* is deprecated, en een sql statement als deze hoort parameterized queries te gebruiken. Zie iets als http://php.net/manual/en/pdo.prepared-statements.php

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 06:54
toxict schreef op maandag 02 februari 2015 @ 21:53:
[...]


Ik krijg bij het lezen van " INSERT INTO" het idee dat ik waardes in een tabel ga plaatsen.
Mijn bedoeling is om middels variabelen een query te bouwen om juist iets uit te lezen...
Zie ik dit goed of heb ik het mis?
Het was ook niet bedoeling om de hele query 1:1 over te nemen..... Het was meer als voorbeeld van hoe ik de PHP-variabelen in de query gebruikte.
pedorus schreef op maandag 02 februari 2015 @ 21:55:
Ik zou dat voorbeeld vermijden, mysql_* is deprecated, en een sql statement als deze hoort parameterized queries te gebruiken. Zie iets als http://php.net/manual/en/pdo.prepared-statements.php
Klopt, dit was gewoon voor de hobby thuis, voor in productie was ik niet van plan om deprecated commando's te gaan gebruiken.

Acties:
  • 0 Henk 'm!

  • toxict
  • Registratie: September 2001
  • Laatst online: 16-10 18:00
Een ECHO van $SQL_001 geeft als resultaat: SELECT MAX(p1_meterreading_in_1) FROM p1_log WHERE p1_timestamp BETWEEN '2015-02-01 00:00:00' AND '2015-02-02 00:00:00';

Als ik het resultaat in mysql plak, dan krijg ik de waarde terug die ik ook zoek.
Ik begrijp daarom dan niet wat er in het PHP gedeelte fout gaat.

PHP:
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
<html>
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "p1";

// Create connection

$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection

if ($conn->connect_error)
    {
    die("Connection failed: " . $conn->connect_error);
    }

// ------------------------------------------------------------------------------------------------------------------------------------------------- \\

$date_yesterday_last_row = date("Y-m-d H:i:s", strtotime('today'));
$date_yesterday_first_row = date("Y-m-d H:i:s", strtotime('yesterday'));

$sql_001 = "SELECT MAX(p1_meterreading_in_1) FROM p1_log WHERE p1_timestamp BETWEEN '$date_yesterday_first_row' AND '$date_yesterday_last_row';";
$result = $conn->query($sql_001);

<Hier moet wat komen om het resultaat weer te geven.>

// ------------------------------------------------------------------------------------------------------------------------------------------------- \\

$conn->close();
?>  

</body>
</html>

http://www.pvoutput.org/intraday.jsp?sid=31923


Acties:
  • 0 Henk 'm!

  • Onoffon
  • Registratie: April 2006
  • Laatst online: 23:02
Doet een simpele select het wel? En heb je al geprobeerd om in je PHP de timestamps hard-coded neer te zetten?

Just a simple thought....


Acties:
  • 0 Henk 'm!

  • Aionicus
  • Registratie: Februari 2011
  • Laatst online: 08-08-2023
Zou inderdaad mezelf even afvragen wat je terug krijgt vanuit de database, pakt hij een andere select of een simpele grab from id wel ?

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
@TS : Hoe weet je dat je geen resultaat krijgt?

In je stukje voorbeeldcode staat : "<Hier moet wat komen om het resultaat weer te geven.>" maar zolang daar niets kloppends staat kan je query goed zijn, maar je gaat gewoon niets getoond krijgen.

Persoonlijk vermoed ik simpelweg dat je de verkeerde kolom probeert op te vragen in je resultaat... Ik zou je daarom adviseren om je max() een alias mee te geven zodat je zelf 100% duidelijk is wat de kolomnaam is die je hebt gecreeerd.

Maar opzich valt er weinig over te zeggen zonder meer info...

Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 16-10 06:58
Volgens mij open je ook nergens je body van je HTML. Maar daarnaast: Hoe probeer je je resultset uit te printen op het scherm? Probeer eens een var_dump van de $result, kijk wat erin zit.

Acties:
  • 0 Henk 'm!

  • toxict
  • Registratie: September 2001
  • Laatst online: 16-10 18:00
Goedemorgen....thanks voor alle hulp....heb niet zoveel kennis van PHP, maar jullie antwoorden hebben mij wat inzichten gegeven en ik ben verder gekomen.

ECHO van de SQL query gaf het juiste resultaat..Dit resultaat kon ik direct in MySQL plakken en dat werkte uiteindelijk.

Kwam erop neer dat ik de variabelen om moest draaien.

(PS: Mijn code hier op de site was niet complete, wel op mijn system...excuses)

-slotje-

http://www.pvoutput.org/intraday.jsp?sid=31923


Acties:
  • 0 Henk 'm!

Verwijderd

Hoewel het misschien niet helemaal "on topic" is zou ik in dit soort scenario's kiezen voor geparametriseerde stored procedures. Dat scheelt je een hoop gekl**t met dubbele aanhallingstekens etc. en je kunt je queries makkelijker testen/debuggen en aanpassen etc.

Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Je kunt "gisteren" ook berekenen met SQL: CURRENT_DATE - INTERVAL 1 DAY. Heb je ook geen quotes e.d. meer nodig, gewoon plain SQL. Met SQL kun je zoveel meer dan alleen maar een recht-toe-recht-aan SELECT....

Voor de liefhebber, Modern SQL: http://www.slideshare.net/MarkusWinand/modern-sql
Pagina: 1