PHP/MYSQL: (double) quotes en backticks ???
Als ik CREATE TABLE `$var` doe dan werkt dat, maar bij een andere query zoals INSERT INTO niet.
Ik krijg de volgende foutmelding
Code (php)
1
2
3
2
3
Fout:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''.` `.' (linkoms, linkadd) VALUES ( 'aaa', 'http://www.aa.com' )' at line 1
zijn toegevoegd aan de database (regel 2)
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''.` `.' (linkoms, linkadd) VALUES ( 'aaa', 'http://www.aa.com' )' at line 1
zijn toegevoegd aan de database (regel 2)
als gevolg van deze code
Code (php)
1
2
2
$sql = "INSERT INTO '.`$col`.' (linkoms, linkadd) VALUES ( '". $conn->real_escape_string($_POST['linkoms'][$key]) ."',
'". $conn->real_escape_string($_POST['linkadd'][$key]) ."' )";
'". $conn->real_escape_string($_POST['linkadd'][$key]) ."' )";
Iemand enig idee hoe $col in een INSERT INTO query zou moeten?
Als je $sql eens echo'en, dan zie je precies hoe de query eruit ziet.
Ik ben er van uit gegaan dat beide values een niet getal zijn.
Code (php)
1
2
2
$sql = 'INSERT INTO "'.$col.'" (linkoms, linkadd) VALUES ( "'. $conn->real_escape_string($_POST['linkoms']['.$key.']) .'",
"'. $conn->real_escape_string($_POST['linkadd']['.$key.']) .'" )';
"'. $conn->real_escape_string($_POST['linkadd']['.$key.']) .'" )';
met echo($sql) kun je kijken of de query er goed uit ziet.
Code (php)
1
2
3
4
2
3
4
<?php
$sql = "INSERT INTO '.`$col`.' (linkoms, linkadd) VALUES ( '". $conn->real_escape_string($_POST['linkoms'][$key]) ."',
'". $conn->real_escape_string($_POST['linkadd'][$key]) ."' )";
?>
$sql = "INSERT INTO '.`$col`.' (linkoms, linkadd) VALUES ( '". $conn->real_escape_string($_POST['linkoms'][$key]) ."',
'". $conn->real_escape_string($_POST['linkadd'][$key]) ."' )";
?>
je begint de string met ", aar na INTO sluit je de string af met '
Toevoeging op 01/07/2015 17:10:04:
zie ook hoe $col rood kleurt ipv blauw
"'.$col.'"
- Aar - op 01/07/2015 19:23:41:
Wat Ivo dus zegt, gebruik na je INTO dit:
"'.$col.'"
"'.$col.'"
Nee, want het is een colomnnaam, dus ".$col.".
Wat ik in jouw SQL query niet echt begrijp is: INSERT INTO '.`$col`.'
Wat probeer je hier te doen? Je insert in een tabel, linkoms & linkadd zijn jouw 'cols'. Daarbij moet je MySQL reserved keywords niet gebruiken zodat je ook geen backticks hoeft te gebruiken en die puntjes snap ik ook niet echt.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$oms = $conn->real_escape_string($_POST['linkoms'][$key]);
$add = $conn->real_escape_string($_POST['linkadd'][$key]);
$sql = "INSERT INTO $col (linkoms, linkadd) VALUES ('$oms', '$add')";
?>
$oms = $conn->real_escape_string($_POST['linkoms'][$key]);
$add = $conn->real_escape_string($_POST['linkadd'][$key]);
$sql = "INSERT INTO $col (linkoms, linkadd) VALUES ('$oms', '$add')";
?>
Dat ziet er al veel overzichtelijker uit, backticks "`" moet je alleen gebruiken als je er echt niet onderuit komt dat er een mysql resverved keyword word gebruikt.
https://dev.mysql.com/doc/refman/5.5/en/keywords.html
En logischer zal zijn dat je de variable "$col" een betere naam geeft.
- SanThe - op 01/07/2015 19:27:47:
Nee, want het is een colomnnaam, dus ".$col.".
Nee, want het is een colomnnaam, dus ".$col.".
Een tabelnaam dus eigenlijk
Ivo P op 01/07/2015 20:28:31:
Een tabelnaam dus eigenlijk
- SanThe - op 01/07/2015 19:27:47:
Nee, want het is een colomnnaam, dus ".$col.".
Nee, want het is een colomnnaam, dus ".$col.".
Een tabelnaam dus eigenlijk
Nee het is geen database kolom. Maar voor de fp layout kun je soms ook een kolom hebben. Maar het is dus idd een tabel genaamd $col als variabele.
Maar welke manier ik ook probeer het lukt niet om de $col in de query te krijgen.
- SanThe - op 01/07/2015 19:27:47:
Nee, want het is een colomnnaam, dus ".$col.".
- Aar - op 01/07/2015 19:23:41:
Wat Ivo dus zegt, gebruik na je INTO dit:
"'.$col.'"
"'.$col.'"
Nee, want het is een colomnnaam, dus ".$col.".
Jep. Zonder die single-quotes dan uiteraard ;-)
Gewijzigd op 01/07/2015 23:31:18 door - Ariën -
Als $col leeg is, welke foutmelding wordt er dan gegeven?
Kunnen we ook terug naar de oorspronkelijke probleemstelling?
Waar loop je nu nog concreet tegenaan? Wat heb je geprobeerd? Welke foutmelding(en) krijg je?
Het volgende is het probleem.
Ik kan met var_dump($tab) aantonen dat $tab gevuld is, maar niet binnen een bepaalde beslissingsconditie.
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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
<?php
// verbinding maken
// gegevens ophalen
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if( isset ($_POST['kolom2']) && ($tab = " " ) ) { // deze regel kan niet toegevoegd worden aan de vlg. if conditie
$tab = $_POST['kolom2'];
var_dump($tab); // deze var_dump wordt gewoon afgedrukt
If (isset($_POST['linkoms']) && (is_array($_POST['linkoms'])) && ($linkoms = " ") && isset($_POST['linkadd'])
&& (is_array($_POST['linkadd'])) && ($linkadd = " ") ) {
// hier wordt var_dump niet afgedrukt
//
foreach($_POST['linkoms'] as $key => $dummy) {
$oms = $conn->real_escape_string($_POST['linkoms'][$key]);
$add = $conn->real_escape_string($_POST['linkadd'][$key]);
$sql = "INSERT INTO " . $tab . " (linkoms, linkadd) VALUES (`$oms`, `$add`)" ;
if ($conn->query($sql) === TRUE)
{ echo "De links zijn toegevoegd aan de database. ";
echo "<br>";
echo $tab;
} else {
echo "Fout: " . " $sql " . " <br>" . $conn->error;
}
echo "<br>" . " tekst";
}
}
else { echo "<center>";
echo "we wachten op uw invoer";
echo "</center>";
}
} }
?>
// verbinding maken
// gegevens ophalen
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if( isset ($_POST['kolom2']) && ($tab = " " ) ) { // deze regel kan niet toegevoegd worden aan de vlg. if conditie
$tab = $_POST['kolom2'];
var_dump($tab); // deze var_dump wordt gewoon afgedrukt
If (isset($_POST['linkoms']) && (is_array($_POST['linkoms'])) && ($linkoms = " ") && isset($_POST['linkadd'])
&& (is_array($_POST['linkadd'])) && ($linkadd = " ") ) {
// hier wordt var_dump niet afgedrukt
//
foreach($_POST['linkoms'] as $key => $dummy) {
$oms = $conn->real_escape_string($_POST['linkoms'][$key]);
$add = $conn->real_escape_string($_POST['linkadd'][$key]);
$sql = "INSERT INTO " . $tab . " (linkoms, linkadd) VALUES (`$oms`, `$add`)" ;
if ($conn->query($sql) === TRUE)
{ echo "De links zijn toegevoegd aan de database. ";
echo "<br>";
echo $tab;
} else {
echo "Fout: " . " $sql " . " <br>" . $conn->error;
}
echo "<br>" . " tekst";
}
}
else { echo "<center>";
echo "we wachten op uw invoer";
echo "</center>";
}
} }
?>
Dus na de if request een nwe if (isset) .. hierbinnen kan ik wel var_dump gebruiken.
Plaats ik de volgende regel echter in de daarop volgende if conditie dan doet hij niets.
In een eerder deel van het script heb ik dezelfde condities gebruikt om kolom2 (dit gaat in een tabel :) ) op te halen en zonder problemen, maar als ik dit binnen de vereiste conditie doe of er buiten om heen dan werkt het niet.
Gewijzigd op 02/07/2015 18:09:01 door Johan West
Een = is een toekenning en geen vergelijking.
Een vergelijking is == of ===.
Ben je het probleem -wat dit ook moge zijn- niet op de verkeerde plaats aan het oplossen?
Welke waarden kan de tabelnaam allemaal hebben? En waarom deze aanpak?
te plaatsen om te zien wat er eigenlijk gedaan moet gaan worden met welke data
En gebruik bij jouw code hier op de site ook eens <¿php en ¿> om de kleurtjes te krijgen bij je posts
Johan West op 02/07/2015 11:05:53:
OK in het vlg. script heb ik $col veranderd in $tab.
Het volgende is het probleem.
Ik kan met var_dump($tab) aantonen dat $tab gevuld is, maar niet binnen een bepaalde beslissingsconditie.
Het volgende is het probleem.
Ik kan met var_dump($tab) aantonen dat $tab gevuld is, maar niet binnen een bepaalde beslissingsconditie.
Dan geef ik je een prima werkende SQL lijn en dan ga je weer backticks gebruiken en dan nog wel om de values heen.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$sql = "INSERT INTO ".$tab." (linkoms, linkadd) VALUES ('".$oms."', '".$add."')";
// is hetzelfde als:
$sql = "INSERT INTO $tab (linkoms, linkadd) VALUES ('$oms', '$add')";
?>
$sql = "INSERT INTO ".$tab." (linkoms, linkadd) VALUES ('".$oms."', '".$add."')";
// is hetzelfde als:
$sql = "INSERT INTO $tab (linkoms, linkadd) VALUES ('$oms', '$add')";
?>
In PHP, een string met "mijnstring" accepteerd variabelen en zet deze automatisch om.
Een string met 'mijnstring' (een litaral string) doet dat dus niet.
Aangezien VALUES in SQL moeten worden aangegeven met single quotes worden meestal toch double quotes gebruikt voor de complete SQL string dus maak er dan ook gebruik van.
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
25
26
27
28
29
30
31
32
33
34
35
36
37
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
<?php
// verbinding maken
// gegevens ophalen
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['kolom2']) && ($tab = " " )){ // deze regel kan niet toegevoegd worden aan de vlg. if conditie
$tab = $_POST['kolom2'];
var_dump($tab); // deze var_dump wordt gewoon afgedrukt
echo gettype($_POST['linkoms']) // waarschijnlijk een string of integer.
echo gettype($_POST['linkadd']) // waarschijnlijk een string of integer.
if(isset($_POST['linkoms']) && (is_array($_POST['linkoms'])) && ($linkoms = " ") && isset($_POST['linkadd']) && (is_array($_POST['linkadd'])) && ($linkadd = " ")){
//hier wordt var_dump niet afgedrukt
// omdat deze "if" statement false is, dus voert hij het else gedeelte uit.
foreach($_POST['linkoms'] as $key => $dummy) {
$oms = $conn->real_escape_string($_POST['linkoms'][$key]);
$add = $conn->real_escape_string($_POST['linkadd'][$key]);
$sql = "INSERT INTO " . $tab . " (linkoms, linkadd) VALUES (`$oms`, `$add`)" ;
if($conn->query($sql) === TRUE){
echo "De links zijn toegevoegd aan de database. <br>$tab";
} else {
echo "Fout: " . " $sql " . " <br>" . $conn->error;
}
echo "<br>" . " tekst";
}
} else {
echo "<center>we wachten op uw invoer</center>";
}
}
}
?>
// verbinding maken
// gegevens ophalen
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['kolom2']) && ($tab = " " )){ // deze regel kan niet toegevoegd worden aan de vlg. if conditie
$tab = $_POST['kolom2'];
var_dump($tab); // deze var_dump wordt gewoon afgedrukt
echo gettype($_POST['linkoms']) // waarschijnlijk een string of integer.
echo gettype($_POST['linkadd']) // waarschijnlijk een string of integer.
if(isset($_POST['linkoms']) && (is_array($_POST['linkoms'])) && ($linkoms = " ") && isset($_POST['linkadd']) && (is_array($_POST['linkadd'])) && ($linkadd = " ")){
//hier wordt var_dump niet afgedrukt
// omdat deze "if" statement false is, dus voert hij het else gedeelte uit.
foreach($_POST['linkoms'] as $key => $dummy) {
$oms = $conn->real_escape_string($_POST['linkoms'][$key]);
$add = $conn->real_escape_string($_POST['linkadd'][$key]);
$sql = "INSERT INTO " . $tab . " (linkoms, linkadd) VALUES (`$oms`, `$add`)" ;
if($conn->query($sql) === TRUE){
echo "De links zijn toegevoegd aan de database. <br>$tab";
} else {
echo "Fout: " . " $sql " . " <br>" . $conn->error;
}
echo "<br>" . " tekst";
}
} else {
echo "<center>we wachten op uw invoer</center>";
}
}
}
?>
Toevoeging op 02/07/2015 15:06:05:
Johan K op 02/07/2015 14:39:20:
Dan geef ik je een prima werkende SQL lijn en dan ga je weer backticks gebruiken en dan nog wel om de values heen.
In PHP, een string met "mijnstring" accepteerd variabelen en zet deze automatisch om.
Een string met 'mijnstring' (een litaral string) doet dat dus niet.
Aangezien VALUES in SQL moeten worden aangegeven met single quotes worden meestal toch double quotes gebruikt voor de complete SQL string dus maak er dan ook gebruik van.
Johan West op 02/07/2015 11:05:53:
OK in het vlg. script heb ik $col veranderd in $tab.
Het volgende is het probleem.
Ik kan met var_dump($tab) aantonen dat $tab gevuld is, maar niet binnen een bepaalde beslissingsconditie.
Het volgende is het probleem.
Ik kan met var_dump($tab) aantonen dat $tab gevuld is, maar niet binnen een bepaalde beslissingsconditie.
Dan geef ik je een prima werkende SQL lijn en dan ga je weer backticks gebruiken en dan nog wel om de values heen.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$sql = "INSERT INTO ".$tab." (linkoms, linkadd) VALUES ('".$oms."', '".$add."')";
// is hetzelfde als:
$sql = "INSERT INTO $tab (linkoms, linkadd) VALUES ('$oms', '$add')";
?>
$sql = "INSERT INTO ".$tab." (linkoms, linkadd) VALUES ('".$oms."', '".$add."')";
// is hetzelfde als:
$sql = "INSERT INTO $tab (linkoms, linkadd) VALUES ('$oms', '$add')";
?>
In PHP, een string met "mijnstring" accepteerd variabelen en zet deze automatisch om.
Een string met 'mijnstring' (een litaral string) doet dat dus niet.
Aangezien VALUES in SQL moeten worden aangegeven met single quotes worden meestal toch double quotes gebruikt voor de complete SQL string dus maak er dan ook gebruik van.
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
25
26
27
28
29
30
31
32
33
34
35
36
37
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
<?php
// verbinding maken
// gegevens ophalen
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['kolom2']) && ($tab = " " )){ // deze regel kan niet toegevoegd worden aan de vlg. if conditie
$tab = $_POST['kolom2'];
var_dump($tab); // deze var_dump wordt gewoon afgedrukt
echo gettype($_POST['linkoms']) // waarschijnlijk een string of integer.
echo gettype($_POST['linkadd']) // waarschijnlijk een string of integer.
if(isset($_POST['linkoms']) && is_array($_POST['linkoms']) && $linkoms = " " && isset($_POST['linkadd']) && is_array($_POST['linkadd']) && $linkadd = " "){
//hier wordt var_dump niet afgedrukt
// omdat deze "if" statement false is, dus voert hij het else gedeelte uit.
foreach($_POST['linkoms'] as $key => $dummy) {
$oms = $conn->real_escape_string($_POST['linkoms'][$key]);
$add = $conn->real_escape_string($_POST['linkadd'][$key]);
$sql = "INSERT INTO " . $tab . " (linkoms, linkadd) VALUES (`$oms`, `$add`)" ;
if($conn->query($sql) === TRUE){
echo "De links zijn toegevoegd aan de database. <br>$tab";
} else {
echo "Fout: " . " $sql " . " <br>" . $conn->error;
}
echo "<br>" . " tekst";
}
} else {
echo "<center>we wachten op uw invoer</center>";
}
}
}
?>
// verbinding maken
// gegevens ophalen
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['kolom2']) && ($tab = " " )){ // deze regel kan niet toegevoegd worden aan de vlg. if conditie
$tab = $_POST['kolom2'];
var_dump($tab); // deze var_dump wordt gewoon afgedrukt
echo gettype($_POST['linkoms']) // waarschijnlijk een string of integer.
echo gettype($_POST['linkadd']) // waarschijnlijk een string of integer.
if(isset($_POST['linkoms']) && is_array($_POST['linkoms']) && $linkoms = " " && isset($_POST['linkadd']) && is_array($_POST['linkadd']) && $linkadd = " "){
//hier wordt var_dump niet afgedrukt
// omdat deze "if" statement false is, dus voert hij het else gedeelte uit.
foreach($_POST['linkoms'] as $key => $dummy) {
$oms = $conn->real_escape_string($_POST['linkoms'][$key]);
$add = $conn->real_escape_string($_POST['linkadd'][$key]);
$sql = "INSERT INTO " . $tab . " (linkoms, linkadd) VALUES (`$oms`, `$add`)" ;
if($conn->query($sql) === TRUE){
echo "De links zijn toegevoegd aan de database. <br>$tab";
} else {
echo "Fout: " . " $sql " . " <br>" . $conn->error;
}
echo "<br>" . " tekst";
}
} else {
echo "<center>we wachten op uw invoer</center>";
}
}
}
?>
Gewijzigd op 02/07/2015 15:02:39 door Johan K
Ivo P op 02/07/2015 14:04:10:
Ok de output is:
ik heb de regel geplaatst na :
hoe dat met omgekeerde vraagtekens zit weet ik niet.
Gewijzigd op 02/07/2015 17:45:16 door Johan West