Velden 2e tabel niet herkend bij gebruik van INNER JOIN
ik heb twee tabellen OU en Person.
Hieronder de functie waarom het gaat. Ik maak in mijn SQL een INNER JOIN maar ik krijg bij de uitvoer helaas een foutmelding die ik niet kan plaatsen.. Maar ik ben nog niet zo'n expert in deze... ik dacht dat het zo moest werken.. maar waar het niet goed gaat kan ik niet verklaren. Iemand die daarbij kan en wil helpen?
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
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
82
83
84
85
86
87
88
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
82
83
84
85
86
87
88
//------------------------------------------------------------------------ FUNCTIE Divisie
function divisie (){
global $connection;
$where = NULL;
if (isset($_GET['ou'])){
$where = 'WHERE Z_ORG_CODE = "'.mysqli_real_escape_string($connection, $_GET['ou']).'"';
}
$sqlUitlezen = mysqli_query($connection, $sql = "
SELECT
ou.MSKEYVALUE_OU,
ou.DISPLAYNAME,
ou.Z_MX_VALIDTO,
ou.Z_REFERENCE_MX_MANAGER,
ou.Z_ORG_CODE
person.
FROM
ou
INNER JOIN
person
ON
ou.Z_REFERENCE_MX_MANAGER = person.MSKEYVALUE_MEDEWERKER
".$where." OR Z_ORG_DN_CODE LIKE '%" . mysqli_real_escape_string($connection, $_GET['ou'] ?? null) . "%'
AND
Z_MX_VALIDTO = '31-12-9999'
AND
MSKEYVALUE_OU <> 'OU:99999999'
AND
MSKEYVALUE_OU <> 'OU:88888888'
AND
MSKEYVALUE_OU <> 'OU:50317636'
AND
MSKEYVALUE_OU <> 'OU:50190318'
AND
MSKEYVALUE_OU <> 'OU:11111111'
ORDER BY
MSKEYVALUE_OU ASC
");
$sqlAantal = mysqli_num_rows($sqlUitlezen);
if ($sqlAantal > 0){
echo '<article>';
echo '<table id="customers">';
echo ' <tr>';
echo ' <td colspan="4" align="right"><h3>Aantal afdelingen binnen deze divisie ('.$sqlAantal.')</h3></td>';
echo ' </tr>';
echo ' <tr>';
echo ' <th><h4>OU code</h4></th>';
echo ' <th><h4>Divisie</h4></th>';
echo ' <th colspan="2"><h4>Manager</h4></th>';
echo ' </tr>';
while ($sqlData = mysqli_fetch_assoc($sqlUitlezen)){
echo ' <tr>';
echo ' <td><h6>'.$sqlData['MSKEYVALUE_OU'].'</h6></td>';
echo ' <td><h6>'.$sqlData['DISPLAYNAME'].'</h6></td>';
echo ' <td><h6>'.$sqlData['MSKEYVALUE_MEDEWERKER'].'</h6></td>';
echo ' <td align="center">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<!--
<td><a href="ou.php?actie=divisie&ou='.str_replace(' ','+',$sqlData['Z_ORG_CODE']).'"><img src="../img/icon-afdelingen.png" height="20" title="Afdelingen"></a></td>
-->
<td><a href="person.php?actie=divisie2medewerkers&ou='.str_replace(' ','+',$sqlData['MSKEYVALUE_OU']).'"><img src="../img/icon-personen.png" height="20" title="Medewerkers"></a></td></td>
<!--
<td><img src="../img/icon-rollen.png" height="20" title="Rollen"></td>
-->
<td><A HREF="javascript:javascript:history.go(-1)"><img src="../img/icon-pagina-terug.png" height="12" title="Vorige pagina"></a></td>
</tr>
</table>
</td>';
echo ' </tr>';
}
echo '</table>';
echo '</article>';
}else{
echo '<h3>Sorry, ik heb geen OU'."'s".' kunnen vinden!</h3>';
}
}
//------------------------------------------------------------------------ einde functie
function divisie (){
global $connection;
$where = NULL;
if (isset($_GET['ou'])){
$where = 'WHERE Z_ORG_CODE = "'.mysqli_real_escape_string($connection, $_GET['ou']).'"';
}
$sqlUitlezen = mysqli_query($connection, $sql = "
SELECT
ou.MSKEYVALUE_OU,
ou.DISPLAYNAME,
ou.Z_MX_VALIDTO,
ou.Z_REFERENCE_MX_MANAGER,
ou.Z_ORG_CODE
person.
FROM
ou
INNER JOIN
person
ON
ou.Z_REFERENCE_MX_MANAGER = person.MSKEYVALUE_MEDEWERKER
".$where." OR Z_ORG_DN_CODE LIKE '%" . mysqli_real_escape_string($connection, $_GET['ou'] ?? null) . "%'
AND
Z_MX_VALIDTO = '31-12-9999'
AND
MSKEYVALUE_OU <> 'OU:99999999'
AND
MSKEYVALUE_OU <> 'OU:88888888'
AND
MSKEYVALUE_OU <> 'OU:50317636'
AND
MSKEYVALUE_OU <> 'OU:50190318'
AND
MSKEYVALUE_OU <> 'OU:11111111'
ORDER BY
MSKEYVALUE_OU ASC
");
$sqlAantal = mysqli_num_rows($sqlUitlezen);
if ($sqlAantal > 0){
echo '<article>';
echo '<table id="customers">';
echo ' <tr>';
echo ' <td colspan="4" align="right"><h3>Aantal afdelingen binnen deze divisie ('.$sqlAantal.')</h3></td>';
echo ' </tr>';
echo ' <tr>';
echo ' <th><h4>OU code</h4></th>';
echo ' <th><h4>Divisie</h4></th>';
echo ' <th colspan="2"><h4>Manager</h4></th>';
echo ' </tr>';
while ($sqlData = mysqli_fetch_assoc($sqlUitlezen)){
echo ' <tr>';
echo ' <td><h6>'.$sqlData['MSKEYVALUE_OU'].'</h6></td>';
echo ' <td><h6>'.$sqlData['DISPLAYNAME'].'</h6></td>';
echo ' <td><h6>'.$sqlData['MSKEYVALUE_MEDEWERKER'].'</h6></td>';
echo ' <td align="center">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<!--
<td><a href="ou.php?actie=divisie&ou='.str_replace(' ','+',$sqlData['Z_ORG_CODE']).'"><img src="../img/icon-afdelingen.png" height="20" title="Afdelingen"></a></td>
-->
<td><a href="person.php?actie=divisie2medewerkers&ou='.str_replace(' ','+',$sqlData['MSKEYVALUE_OU']).'"><img src="../img/icon-personen.png" height="20" title="Medewerkers"></a></td></td>
<!--
<td><img src="../img/icon-rollen.png" height="20" title="Rollen"></td>
-->
<td><A HREF="javascript:javascript:history.go(-1)"><img src="../img/icon-pagina-terug.png" height="12" title="Vorige pagina"></a></td>
</tr>
</table>
</td>';
echo ' </tr>';
}
echo '</table>';
echo '</article>';
}else{
echo '<h3>Sorry, ik heb geen OU'."'s".' kunnen vinden!</h3>';
}
}
//------------------------------------------------------------------------ einde functie
de foutmelding die ik krijg is:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\wamp64\www\bp\members\inc\plugin.php on line 132
line 132 een line die in de bovengenoemde functie staat.. .te weten: $sqlAantal = mysqli_num_rows($sqlUitlezen);
$sql even tijdelijk outputten helpt ook vaak mee bij dergelijke debugging.
Gewijzigd op 03/02/2019 13:46:26 door - Ariën -
ik heb
direct onder MySqli en vóór geplaats en ik krijg onderstaande return:
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 '. FROM ou INNER JOIN person ON ou.Z_REFERENCE_MX_MANAGER ' at line 7
Maar dit is voor me acacadabra ik snap niet goed wat er nu staat.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
SELECT
ou.MSKEYVALUE_OU,
ou.DISPLAYNAME,
ou.Z_MX_VALIDTO,
ou.Z_REFERENCE_MX_MANAGER,
ou.Z_ORG_CODE
person.
ou.MSKEYVALUE_OU,
ou.DISPLAYNAME,
ou.Z_MX_VALIDTO,
ou.Z_REFERENCE_MX_MANAGER,
ou.Z_ORG_CODE
person.
Aan het eind gaat hier iets fout. Haal die "person." eens weg en kijk eens wat er dan gebeurt.
Wat bij waar en wat bij niet waar.
Van PHP versie 7 is gebruik met ?? ook toegelaten maar misschien beter deze functie buiten query zetten?
mysqli_real_escape_string($connection, (($_GET['ou']) ? 'null' : 'False'));
Ik heb de () rond je var $_GET geplaatst en rond de functie.
Je hebt pas je controle of er output is nadat je de gegevens wil gaan tonen...
Als voorbeeld
$results = $mysqli->query("SELECT * FROM table");
if($results->num_rows === 0) <---------Dit mis je
{
echo 'No results';
}
else
{
//HERE YOU PROCESS
while(){....}
}
Dirk Huizinga op 03/02/2019 14:07:18:
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 '. FROM ou INNER JOIN person ON ou.Z_REFERENCE_MX_MANAGER ' at line 7
Vanaf dat punt snapt MySQL het ook niet meer.
Ozzie PHP op 03/02/2019 14:14:10:
Haal die "person." eens weg en kijk eens wat er dan gebeurt.
Die "person." is (vermoedelijk) wel het probleem, en weghalen zal het wel oplossen, maar ik neem aan dat je hier "person.*" bedoelde (= "alle velden uit de person tabel").
Dus:
Ozzie PHP op 03/02/2019 14:14:10:
ooopsie... die person. achter de select is nog 'n restantje van een probeersel. Heeft niet geholpen. Wanneer ik weghaal en ik execute de sql weer dan krijg ik de foutmelding:
Notice: Undefined index: MSKEYVALUE_MEDEWERKER in C:\wamp64\www\bp\members\inc\plugin.php on line 152
en laat die MSKEYVALUE_MEDEWERKER nou net één van de waarden van mij INNER JOIN zijn.
Toevoeging op 03/02/2019 15:35:59:
Bart Smulders op 03/02/2019 14:14:31:
Bij de mysqli_real_escape_string stelde ik mij de vraag of hij daar geen fouten op geeft.
Wat bij waar en wat bij niet waar.
Van PHP versie 7 is gebruik met ?? ook toegelaten maar misschien beter deze functie buiten query zetten?
mysqli_real_escape_string($connection, (($_GET['ou']) ? 'null' : 'False'));
Ik heb de () rond je var $_GET geplaatst en rond de functie.
Je hebt pas je controle of er output is nadat je de gegevens wil gaan tonen...
Als voorbeeld
$results = $mysqli->query("SELECT * FROM table");
if($results->num_rows === 0) <---------Dit mis je
{
echo 'No results';
}
else
{
//HERE YOU PROCESS
while(){....}
}
Wat bij waar en wat bij niet waar.
Van PHP versie 7 is gebruik met ?? ook toegelaten maar misschien beter deze functie buiten query zetten?
mysqli_real_escape_string($connection, (($_GET['ou']) ? 'null' : 'False'));
Ik heb de () rond je var $_GET geplaatst en rond de functie.
Je hebt pas je controle of er output is nadat je de gegevens wil gaan tonen...
Als voorbeeld
$results = $mysqli->query("SELECT * FROM table");
if($results->num_rows === 0) <---------Dit mis je
{
echo 'No results';
}
else
{
//HERE YOU PROCESS
while(){....}
}
Toevoeging op 03/02/2019 15:37:04:
Bart Smulders op 03/02/2019 14:14:31:
Bij de mysqli_real_escape_string stelde ik mij de vraag of hij daar geen fouten op geeft.
Wat bij waar en wat bij niet waar.
Van PHP versie 7 is gebruik met ?? ook toegelaten maar misschien beter deze functie buiten query zetten?
mysqli_real_escape_string($connection, (($_GET['ou']) ? 'null' : 'False'));
Ik heb de () rond je var $_GET geplaatst en rond de functie.
Sorry Bart,
Hier raak je me kwijt. Sorry. Maar ik weet niet goed wat ik hiermee kan en of zou moeten.
Je hebt pas je controle of er output is nadat je de gegevens wil gaan tonen...
Als voorbeeld
$results = $mysqli->query("SELECT * FROM table");
if($results->num_rows === 0) <---------Dit mis je
{
echo 'No results';
}
else
{
//HERE YOU PROCESS
while(){....}
}
Wat bij waar en wat bij niet waar.
Van PHP versie 7 is gebruik met ?? ook toegelaten maar misschien beter deze functie buiten query zetten?
mysqli_real_escape_string($connection, (($_GET['ou']) ? 'null' : 'False'));
Ik heb de () rond je var $_GET geplaatst en rond de functie.
Sorry Bart,
Hier raak je me kwijt. Sorry. Maar ik weet niet goed wat ik hiermee kan en of zou moeten.
Je hebt pas je controle of er output is nadat je de gegevens wil gaan tonen...
Als voorbeeld
$results = $mysqli->query("SELECT * FROM table");
if($results->num_rows === 0) <---------Dit mis je
{
echo 'No results';
}
else
{
//HERE YOU PROCESS
while(){....}
}
Toevoeging op 03/02/2019 15:41:15:
Rob Doemaarwat op 03/02/2019 14:40:20:
Vanaf dat punt snapt MySQL het ook niet meer.
Die "person." is (vermoedelijk) wel het probleem, en weghalen zal het wel oplossen, maar ik neem aan dat je hier "person.*" bedoelde (= "alle velden uit de person tabel").
Dus:
Dirk Huizinga op 03/02/2019 14:07:18:
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 '. FROM ou INNER JOIN person ON ou.Z_REFERENCE_MX_MANAGER ' at line 7
Vanaf dat punt snapt MySQL het ook niet meer.
Ozzie PHP op 03/02/2019 14:14:10:
Haal die "person." eens weg en kijk eens wat er dan gebeurt.
Die "person." is (vermoedelijk) wel het probleem, en weghalen zal het wel oplossen, maar ik neem aan dat je hier "person.*" bedoelde (= "alle velden uit de person tabel").
Dus:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
SELECT
ou.MSKEYVALUE_OU,
ou.DISPLAYNAME,
ou.Z_MX_VALIDTO,
ou.Z_REFERENCE_MX_MANAGER,
ou.Z_ORG_CODE
person.*
FROM
ou
INNER JOIN
person
//enz
ou.MSKEYVALUE_OU,
ou.DISPLAYNAME,
ou.Z_MX_VALIDTO,
ou.Z_REFERENCE_MX_MANAGER,
ou.Z_ORG_CODE
person.*
FROM
ou
INNER JOIN
person
//enz
wanneer ik person. vervang door person.* (wat voor alle velden staat) volgt de melding:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\wamp64\www\bp\members\inc\plugin.php on line 133
Toevoeging op 03/02/2019 16:06:23:
dom dom dom.....
wanneer je de select heel erg goed kijkt heb
het laatste veld welk ik uitlees uit de tabel ou NIET afgesloten met een ,
daar staat en valt het dus mee...
maar ik wil jullie bedank voor jullie aanvullingen, tips en handvaten...
want door het plaatsen van die komma.. heb ik gewenste result
(topic mag gesloten worden)
Maar je haalt MSKEYVALUE_MEDEWERKER niet op in je SELECT.
Edit: Mooi dat het opgelost is.
Gewijzigd op 03/02/2019 16:17:13 door - Ariën -
In een ander topic is precies hetzelfde aan de hand.
Het enige advies wat ik je kan geven is dat je leert dit soort foutmeldingen te lezen.
De beste manier om te leren programmeren is wat mij betreft nog steeds door te leren debuggen.