Hi guys,


hieronder een functie welken net werkt.

ergens zit een issue maar zie niet waar. Krijg de foutmelding Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in

Maar zie het gewoon niet... zal wel weer zo'n oh,ja dingetje zijn..


	function abu (){
		global $connection;
		
		$where = NULL;
		if (isset($_GET['ou'])){
			$where = 'WHERE Z_ORG_DN_CODE LIKE "%'.mysqli_real_escape_string($connection, $_GET['ou']).'%"';
		}
		
		$sqlUitlezen = mysqli_query($connection, 
		$sql = "SELECT 
		idm_ou.MSKEYVALUE_OU,
		idm_ou.DISPLAYNAME,
		idm_ou.Z_ORG_CODE,
		idm_ou.Z_ORG_DN_CODE,
		idm_ou.Z_REFERENCE_MX_MANAGER,
		idm_person.MX_LASTNAME,
		idm_person.ACHMEA_EMPLOYEENUMBER
		
		FROM idm_ou ".$where." 
		
		INNER JOIN idm_person ON idm_ou.Z_REFERENCE_MX_MANAGER = idm_person.MSKEYVALUE_MEDEWERKER
		
		ORDER BY `MSKEYVALUE_OU` ASC");
		
		$sqlAantal = mysqli_num_rows($sqlUitlezen);
		
		if ($sqlAantal > 0){
			while ($sqlData = mysqli_fetch_assoc($sqlUitlezen)){	
			
			echo '<table border="0">';
			echo '<tr>';
			echo '<td><a href="?actie=abu&ou='.$sqlData['MSKEYVALUE_OU'].'"><img src="../img/pointer.png" height="14"></a></td>';
			echo '<td>&nbsp;</td>';
			echo '<td><h6><a href="?actie=abu&ou='.$sqlData['MSKEYVALUE_OU'].'">'.$sqlData['MSKEYVALUE_OU'].'</a></td>';
			echo '<td>&nbsp;</td>';
			echo '<td><h6><a href="?actie=abu&ou='.$sqlData['MSKEYVALUE_OU'].'">'.$sqlData['DISPLAYNAME'].'</a></td>';
			echo '</tr>';
			echo '</table>';
			}
			echo '<hr style="margin:5px 0 5px 0;">';
			echo '<h5>Aantal gevonden afdelingen <em>('.$sqlAantal.')</em></h5>';
			echo '<h6><a href="javascript:javascript:history.go(-1)">Klik hier om naar de vorige pagina te gaan</a></h6>';
		}else{
			echo 'Sorry, ik heb geen gegevens kunnen vinden!';
		}
	}
$sqlUitlezen = mysqli_query($connection,
$sql = "SELECT ...");

Dit kan niet.
Je geeft hier als 2e parameter een boolean mee.

$sql = "SELECT ..." geeft true of false.

[size=xsmall]Toevoeging op 13/07/2019 17:03:53:[/size]

Oplossing:
$sqlUitlezen = mysqli_query($connection, $sql);

Of:
$sqlUitlezen = mysqli_query($connection, "SELECT ...");
Thnx SanThe,

Ik had al wel zo'n vermoeden namelijk en had ook oorspronkelijk $sqlUitlezen = mysqli_query($connection, "SELECT ...");

Maar dan krijg ik toch ook dezelfde foutmelding dus het moet 'm toch nog ergens anders in zitten want de melding blijft als ik die oplossing gebruik.
Dan zal de query mislukt zijn.
Maak dus een nette foutafhandeling.
ben niet zo'n ervaren programmeur .... geen idee wat je daarmee bedoel en hou je die dan moet maken,
geen flauw idee waar ik nu mee bezig ben :-) maar vooralsnog geen resultaat en zie ik weinig gebeuren.
Voor een snelle check kun je ook gewoon die $sql even op het scherm knallen:

   die("SELECT 
        idm_ou.MSKEYVALUE_OU,
        idm_ou.DISPLAYNAME,
        idm_ou.Z_ORG_CODE,
        idm_ou.Z_ORG_DN_CODE,
        idm_ou.Z_REFERENCE_MX_MANAGER,
        idm_person.MX_LASTNAME,
        idm_person.ACHMEA_EMPLOYEENUMBER
        
        FROM idm_ou ".$where." 
        
        INNER JOIN idm_person ON idm_ou.Z_REFERENCE_MX_MANAGER = idm_person.MSKEYVALUE_MEDEWERKER
        
        ORDER BY `MSKEYVALUE_OU` ASC");

Dan plak je 'm in je database programma (HeidiSQL, phpMyAdmin) en draai je 'm daar. Die vertelt je dan precies wat er mis mee is.

O, ik zie het al: je JOIN komt na je WHERE. Het moet:

SELECT *
FROM tabel
  JOIN andere_table ON dit = dat
WHERE zus = "zo"

Dus de WHERE na de evt. JOIN(S)
Verder kan je die hele echo-put in die while() in één string plaatsen.

Als het geen functie was zou je dit zelfs buiten PHP-blokken kunnen plaatsen.
Rob Doemaarwat op 13/07/2019 18:54:04

Voor een snelle check kun je ook gewoon die $sql even op het scherm knallen:

   die("SELECT 
        idm_ou.MSKEYVALUE_OU,
        idm_ou.DISPLAYNAME,
        idm_ou.Z_ORG_CODE,
        idm_ou.Z_ORG_DN_CODE,
        idm_ou.Z_REFERENCE_MX_MANAGER,
        idm_person.MX_LASTNAME,
        idm_person.ACHMEA_EMPLOYEENUMBER
        
        FROM idm_ou ".$where." 
        
        INNER JOIN idm_person ON idm_ou.Z_REFERENCE_MX_MANAGER = idm_person.MSKEYVALUE_MEDEWERKER
        
        ORDER BY `MSKEYVALUE_OU` ASC");

Dan plak je 'm in je database programma (HeidiSQL, phpMyAdmin) en draai je 'm daar. Die vertelt je dan precies wat er mis mee is.

O, ik zie het al: je JOIN komt na je WHERE. Het moet:

SELECT *
FROM tabel
  JOIN andere_table ON dit = dat
WHERE zus = "zo"

Dus de WHERE na de evt. JOIN(S)



op het scherm komt mijn SQL er dan als volgt uit te zien:



SELECT idm_ou.MSKEYVALUE_OU, idm_ou.DISPLAYNAME, idm_ou.Z_ORG_CODE, idm_ou.Z_ORG_DN_CODE, idm_ou.Z_REFERENCE_MX_MANAGER, idm_person.MSKEYVALUE_MEDEWERKER, idm_person.MX_LASTNAME, idm_person.ACHMEA_EMPLOYEENUMBER INNER JOIN idm_person ON idm_ou.Z_REFERENCE_MX_MANAGER = idm_person.MSKEYVALUE_MEDEWERKER FROM idm_ou WHERE idm_ou.Z_ORG_DN_CODE LIKE "%40000001%" ORDER BY idm_ou.MSKEYVALUE_OU ASC

Er zal ongetwijf iets mis zijn (echter ik ziet het niet. Maar dat is niet zo moeilijk. Ben geen expert) maar het werkt toch ook niet :-) Zelfs niet als de WHERE na de JOIN plaats.


wanneer ik de sql in PHP Admin of HeidiSQL draai krijg ik onderstaande melding:

#1064 - Er is iets fout in de gebruikte syntax bij 'INNER JOIN idm_person ON idm_ou.Z_REFERENCE_MX_MANAGER = idm_person.MSKEYVALUE_M' in regel 1

daar wordt wat afgekapt (bold gemaakt)... Waarom geen idee.


Voor mij is het hardnekkige kost die ik (nog) niet kan doorgronden.....
En werkt die query in phpmyAdmin/Heidisql?

Hoe ziet de code er nu uit met de query erin?
heb je SanThe's aanpassing al verwerkt?

Reageren