INSERT MySQLi lukt niet
Ik heb de volgende code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$conn = new mysqli('localhost', 'root', 'password', 'ResolDB');
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully <br>";
$veld1 = '2014-01-01 00:01:00';
$veld2 = 11.0;
$resultaat = mysqli_query($conn, "INSERT INTO test (Timestamp, TS1) VALUES ('" . $veld1 . "','" . $veld2 . "');");
if ($resultaat == false)
{
echo "Query mislukt. Foutmelding is: " . mysqli_error();
}
else
{
echo "Query gelukt!";
}
mysqli_close($conn);
?>
$conn = new mysqli('localhost', 'root', 'password', 'ResolDB');
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully <br>";
$veld1 = '2014-01-01 00:01:00';
$veld2 = 11.0;
$resultaat = mysqli_query($conn, "INSERT INTO test (Timestamp, TS1) VALUES ('" . $veld1 . "','" . $veld2 . "');");
if ($resultaat == false)
{
echo "Query mislukt. Foutmelding is: " . mysqli_error();
}
else
{
echo "Query gelukt!";
}
mysqli_close($conn);
?>
met het volgende resultaat:
Connected successfully
Query mislukt. Foutmelding is:
Er komt dus niet eens een foutmelding. Waar gaat het fout?
Gewijzigd op 04/12/2014 20:39:30 door Rene Zwolsman
dit: "');");
moet zijn: "')");
Je mist $conn in je mysql_error, en je hoeft geen afsluitende punt-komma in je query zelf te plaatsen.
Code (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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$conn = new mysqli('localhost', 'root', 'password', 'ResolDB');
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully <br>";
$veld1 = '2014-01-01 00:01:00';
$veld2 = 11.0;
$resultaat = mysqli_query($conn, "INSERT INTO test (Timestamp, TS1) VALUES ('" . $veld1 . "','" . $veld2 . "')");
if ($resultaat == false)
{
echo "Query mislukt. Foutmelding is: " . mysqli_error($conn);
}
else
{
echo "Query gelukt!";
}
mysqli_close($conn);
?>
$conn = new mysqli('localhost', 'root', 'password', 'ResolDB');
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully <br>";
$veld1 = '2014-01-01 00:01:00';
$veld2 = 11.0;
$resultaat = mysqli_query($conn, "INSERT INTO test (Timestamp, TS1) VALUES ('" . $veld1 . "','" . $veld2 . "')");
if ($resultaat == false)
{
echo "Query mislukt. Foutmelding is: " . mysqli_error($conn);
}
else
{
echo "Query gelukt!";
}
mysqli_close($conn);
?>
maar het resultaat is hetzelfde...
Over het algemeen niet erg, behalve bij het controleren of de verbinding tot stand is gekomen.
http://nl3.php.net/manual/en/mysqli.construct.php
OOP:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
// DIT GEBRUIK JIJ
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
/*
* This is the "official" OO way to do it,
* BUT $connect_error was broken until PHP 5.2.9 and 5.3.0.
*/
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
echo 'Success... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
// DIT GEBRUIK JIJ
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
/*
* This is the "official" OO way to do it,
* BUT $connect_error was broken until PHP 5.2.9 and 5.3.0.
*/
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
echo 'Success... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
Procedureel:
Code (php)
Volgens de gelinkte documentatie:
Quote:
Note:
OO syntax only: If a connection fails an object is still returned. To check if the connection failed then use either the mysqli_connect_error() function or the mysqli->connect_error property as in the preceding examples.
OO syntax only: If a connection fails an object is still returned. To check if the connection failed then use either the mysqli_connect_error() function or the mysqli->connect_error property as in the preceding examples.
Resultaat:
Success... Localhost via UNIX socket
Query gelukt!
Bedankt!
Toch nog een vraag over de INSERT in de database. Ik wil 49 waarden per regel toevoegen in de database. De eerste kolom van de database is "id" met een auto_increment zodat elke regel die wordt toegevoegd een hoger nummertje krijgt. Totaal heb ik dus 50 kolommen. De variabelen die ik insert, staan in de volgorde van de kolommen waardoor ik, volgens mij, niet alle kolomnamen hoef te omschrijven in mijn INSERT query. Maar als ik 49 variabelen in mijn query opneem, geeft hij als resultaat dat het aantal kolommen niet overeenkomt met het aantal waarden. Ik moet voor de kolom id een variabele opgeven om het te laten werken maar ik dacht dat dat juist niet hoeft omdat deze kolom automatisch gevuld wordt. Is dit een instelling in de database?
Maar... waarom 50 kolommen? Dit klinkt als een database-normaliseringsfout.
Gewijzigd op 22/12/2014 15:37:39 door - Ariën -
Ik heb een datalogger welke in een JSON output geeft van 47 verschillende sensoren. (20*temperatuur / 6*druk / 6*stroomsnelheid / 1*straling / 14*pompvermogen ) Deze waarden wil ik per minuut opslaan in een database om vervolgens grafieken van de maken. Tips voor andere oplossingen?
Sensors:
ID (PK) AutoIncrement
Sensor - varchar(50)
En dan een tabel met de metingen:
Measures:
ID (PK) AutoIncrement
SensorID INT(6)
Value
DateMeasuring - DATETIME
Mocht er een nieuwe sensor komen, kan je die toevoegen aan de Sensors-tabel.
Gewijzigd op 22/12/2014 15:56:35 door - Ariën -
In de 50 sensoren die er nu gelogd worden, zitten er ca 20 die nog niet aangesloten zijn en als standaard waarde 888 °C of 0% geven. Dit zit vastgebakken in de API en kan ik dus niet aanpassen, hooguit niet opslaan (wat ik nu dus wel doe als voorbereiding voor uitbreiding in de toekomst) Meer sensoren dan die 50 is op het apparaat niet mogelijk dus verdere uitbreiding kan niet.
Maar misschien ga ik het toch eens proberen met 2 tabellen. Maar hoe selecteer ik dan een Value behorende bij een bepaalde sensor?
SELECT Value,DateMeasuring FROM Measures WHERE SensorID=4
En dan heb je alle gegevens van de sensor die ID 4 heeft in de Sensor-table.
Je kan bijvoorbeeld een extra veld (active) )aanmaken in de Sensor-table die aangeeft of een sensor actief is. Zo kan je foutieve waardes filteren die steeds 888°C graden zijn.
Gewijzigd op 22/12/2014 16:12:33 door - Ariën -
Quote:
De variabelen die ik insert, staan in de volgorde van de kolommen
Die kolommen staan NU in een volgorde en daarop baseer jij je code.
Een paar mogelijkheden:
* er wordt een aanpassing gedaan en er komt een kolom bij (aan het einde)
* er wordt een anderzins gerommeld aan de tabel en hoewel alle kolommen blijven zijn er 2 van plek verwissseld
* iemand denkt dat ze op alfabet zetten zinnig is.
En ineens valt je code om. Met wat geluk met een foutmelding, met wat pech merk je pas na 2 maanden dat de email adressen nu in een kolom varchar 10 staan en de telefoonnummers in de kolom die voor de email adressen was.
Het is 2 minuten werk om ze even uit te typen, of een halve minuut als je een beetje handig bent met copy-paste uit een create-query in je database beheertool.
Het is uren werk om je corrupte data te herstellen.
Toch snap ik de toegevoegde waarde nog niet zo van 2 tabellen. Tabel 1 met de sensoren snap ik. Een extra sensor is een extra regel. Maar zodra er een extra sensor is, moet ik in de tabel Measures toch nog steeds een kolom toevoegen? En dat is niet anders dan ik zou moeten doen bij mijn huidige opzet? Alleen heet de kolom dan bv SensorID 21 ipv Temperature_sensor_21. Of zie ik dit verkeerd?
Velden toevoegen voor extra sensoren is nergens voor nodig.
Gewijzigd op 24/12/2014 15:43:32 door - Ariën -