ODBC Connection failed
Ik probeer verbinding te maken via een php script met een access database die ik heb gekoppeld aan de ODBC. Maar wanneer ik het php script uitvoer krijg ik: "Connection Failed:" in mijn browser.
De php script ziet er alsvolgt uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$conn=odbc_connect('access_DB','','');
if (!$conn)
{exit("Connection Failed: " . $conn);}
$sql="SELECT * FROM klanten";
$rs=odbc_exec($conn,$sql);
if (!$rs)
{exit("Error in SQL");}
echo "<table><tr>";
echo "<th>naam</th>";
echo "<th>woonplaats</th></tr>";
while (odbc_fetch_row($rs))
{
$naam=odbc_result($rs,"naam");
$woonplaats=odbc_result($rs,"woonplaats");
echo "<tr><td>$naam</td>";
echo "<td>$woonplaats</td></tr>";
}
odbc_close($conn);
echo "</table>";
?>
$conn=odbc_connect('access_DB','','');
if (!$conn)
{exit("Connection Failed: " . $conn);}
$sql="SELECT * FROM klanten";
$rs=odbc_exec($conn,$sql);
if (!$rs)
{exit("Error in SQL");}
echo "<table><tr>";
echo "<th>naam</th>";
echo "<th>woonplaats</th></tr>";
while (odbc_fetch_row($rs))
{
$naam=odbc_result($rs,"naam");
$woonplaats=odbc_result($rs,"woonplaats");
echo "<tr><td>$naam</td>";
echo "<td>$woonplaats</td></tr>";
}
odbc_close($conn);
echo "</table>";
?>
De database is niet beveiligd met een gebruikersnaam of wachtwoord.
Weet iemand misschien hoe ik dit kan oplossen.
Met vriendelijke groet,
Jan Volker
Gewijzigd op 13/07/2012 16:04:42 door Jan Volker
Connectionstring gebruiken ipv access_DB.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$conString = '{Microsoft Access Driver (*.mdb)};Dbq=C:\Windows\NTDS\test\access_DB.mdb;';
if (!$conString)
{exit("Connection Failed: " . $conString);}
$sql="SELECT * FROM klanten";
$rs=odbc_exec($conString,$sql);
if (!$rs)
{exit("Error in SQL");}
echo "<table><tr>";
echo "<th>naam</th>";
echo "<th>woonplaats</th></tr>";
while (odbc_fetch_row($rs))
{
$naam=odbc_result($rs,"naam");
$woonplaats=odbc_result($rs,"woonplaats");
echo "<tr><td>$naam</td>";
echo "<td>$woonplaats</td></tr>";
}
odbc_close($conString);
echo "</table>";
?>
$conString = '{Microsoft Access Driver (*.mdb)};Dbq=C:\Windows\NTDS\test\access_DB.mdb;';
if (!$conString)
{exit("Connection Failed: " . $conString);}
$sql="SELECT * FROM klanten";
$rs=odbc_exec($conString,$sql);
if (!$rs)
{exit("Error in SQL");}
echo "<table><tr>";
echo "<th>naam</th>";
echo "<th>woonplaats</th></tr>";
while (odbc_fetch_row($rs))
{
$naam=odbc_result($rs,"naam");
$woonplaats=odbc_result($rs,"woonplaats");
echo "<tr><td>$naam</td>";
echo "<td>$woonplaats</td></tr>";
}
odbc_close($conString);
echo "</table>";
?>
Ik krijg nu de foutmelding Error in SQL.
Hoe kan ik dat oplossen?
http://www.w3schools.com/php/php_db_odbc.asp
Denk het wel ...
Heb je dit ook in je access database aangepast?
Open the Administrative Tools icon in your Control Panel.
Double-click on the Data Sources (ODBC) icon inside.
Choose the System DSN tab.
Click on Add in the System DSN tab.
Select the Microsoft Access Driver. Click Finish.
In the next screen, click Select to locate the database.
Give the database a Data Source Name (DSN).
Click OK.
Ja dat heb ik doorgenomen. Ik heb ook alle stappen uitgevoerd. Het "Connection Failed" probleem is nu opgelost. Alleen nu heb ik te maken met "Error in SQL".
Probeer eens met een foutafhandeling?
Dit stukje code moet je helemaal boven je script plaatsen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
En vervang jouw query door deze eens.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$sql="SELECT * FROM klanten";
# Check of query is gelukt
if (($rs = odbc_exec($conn,$sql)) === false)
{
# als de query fout is -> foutafhandeling
echo showSQLError($sql,mysql_error(),'Fout met het ophalen.');
}
elseif (odbx_num_rows($rs) == 0)
{
# De query is gelukt en we hebben net gekeken met _num_rows of er een rij is:
# -> Als er geen rij is echon we hier:
echo 'Er is geen lid met dit id!';
}
else
{
echo 'Query gelukt, nu de gegevens tonen';
}
# Check of query is gelukt
if (($rs = odbc_exec($conn,$sql)) === false)
{
# als de query fout is -> foutafhandeling
echo showSQLError($sql,mysql_error(),'Fout met het ophalen.');
}
elseif (odbx_num_rows($rs) == 0)
{
# De query is gelukt en we hebben net gekeken met _num_rows of er een rij is:
# -> Als er geen rij is echon we hier:
echo 'Er is geen lid met dit id!';
}
else
{
echo 'Query gelukt, nu de gegevens tonen';
}
** Er kunnen foutjes inzitten, heb nog nooit met OBCD gewerkt.
Warning: odbc_exec() expects parameter 1 to be resource, string given in C:\Program Files\test\test.php on line 31 Warning: odbc_num_rows() expects parameter 1 to be resource, null given in C:\Program Files\test\test.php on line 36 Er is geen lid met dit id! Warning: odbc_exec() expects parameter 1 to be resource, string given in C:\Program Files\test\test.php on line 47 Error in SQL
Line 31 =
Line 36 =
Line 47 =
Gewijzigd op 19/07/2012 16:04:24 door Jan Volker
Maar ik denk dat ik veel te veel met mysql rekening heb gehouden.
Dit voorbeeldje vond ik trouwens nog op internet:
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
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
<?php
/**
* Maak connectie met de database door de volgende code te gebruiken
**/
$dsn = 'access'; // Vul hier de naam in die je zelf aan de data source hebt gegeven!!
$username = '';
$password = '';
$connectie = odbc_connect($dsn, $user, $pass);
/**
* Zet de query in een variabele
**/
$Query = 'SELECT id, voornaam, achternaam FROM klanten';
/**
* Voer de query uit
**/
$results = odbc_do($connectie, $Query);
/**
* Toon de uitvoer op het scherm
**/
?>
<div style="width: 100%; height: 100%">
<?php
while(odbc_fetch_row($results)) {
$id = odbc_result($results, 'id');
$voornaam = odbc_result($results, 'voornaam');
$achternaam = odbc_result($results, 'achternaam');
?>
<div style="width: 100%; height: 10%; background-color: #336699; color: #FFF;">
<?php echo $achternaam . ' ,' . $voornaam . '<br />'; ?>
</div>
<div style="height: 2px; background-color: #FFF;"></div>
<?php
}
odbc_close($connectie);
?> </div>
/**
* Maak connectie met de database door de volgende code te gebruiken
**/
$dsn = 'access'; // Vul hier de naam in die je zelf aan de data source hebt gegeven!!
$username = '';
$password = '';
$connectie = odbc_connect($dsn, $user, $pass);
/**
* Zet de query in een variabele
**/
$Query = 'SELECT id, voornaam, achternaam FROM klanten';
/**
* Voer de query uit
**/
$results = odbc_do($connectie, $Query);
/**
* Toon de uitvoer op het scherm
**/
?>
<div style="width: 100%; height: 100%">
<?php
while(odbc_fetch_row($results)) {
$id = odbc_result($results, 'id');
$voornaam = odbc_result($results, 'voornaam');
$achternaam = odbc_result($results, 'achternaam');
?>
<div style="width: 100%; height: 10%; background-color: #336699; color: #FFF;">
<?php echo $achternaam . ' ,' . $voornaam . '<br />'; ?>
</div>
<div style="height: 2px; background-color: #FFF;"></div>
<?php
}
odbc_close($connectie);
?> </div>
Gewijzigd op 19/07/2012 18:04:46 door - Diov -
Ik zie het nergens. Je hebt nog steeds geen connection handle.
Zie voorbeeld:
$conn=odbc_connect('northwind','','');
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
(ik heb nog nooit met odbc gewerkt, dit voorbeeld staat op de eerder gegeven url)
Gewijzigd op 19/07/2012 20:20:49 door Aad B
Nee, ik heb helaas geen online voorbeeld. Dit script draait op de IIS van mijn server.
@Aad B
De functie odbc_connect gebruik ik nietmeer. Omdat:
is vervangen door
Meer niet.
- SanThe - op 20/07/2012 14:28:21:
Maar nu stop je slechts een string (= tekst) in een variabele.
Meer niet.
Meer niet.
Hmm, dus dan moet ik dit hebben?
Probeer het zou ik zeggen.
En lees de info eens door op php.net.
Ik krijg nogsteeds "Error in SQL" :(
Maak nette foutafhandeling zodat je de 'echte' foutmelding te zien krijgt.
Warning: odbc_connect() expects at least 3 parameters, 1 given in C:\Program Files\test\test.php on line 24 Warning: odbc_exec() expects parameter 1 to be resource, null given in C:\Program Files\test\test.php on line 30 Warning: odbc_num_rows() expects parameter 1 to be resource, null given in C:\Program Files\test\test.php on line 35 Er is geen lid met dit id! Warning: odbc_exec() expects parameter 1 to be resource, null given in C:\Program Files\test\test.php on line 47 Error in SQL
Mijn script ziet er dan alsvolgt uit:
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
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
<?php
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
$conn=odbc_connect ($conString = '{Microsoft Access Driver (*.mdb)};Dbq=C:\Windows\NTDS\test\access_DB.mdb;');
if (!$conString)
{exit("Connection Failed: " . $conn);}
$sql="SELECT * FROM klanten";
# Check of query is gelukt
if (($rs = odbc_exec($conn,$sql)) === false)
{
# als de query fout is -> foutafhandeling
echo showSQLError($sql,mysql_error(),'Fout met het ophalen.');
}
elseif (odbc_num_rows($rs) == 0)
{
# De query is gelukt en we hebben net gekeken met _num_rows of er een rij is:
# -> Als er geen rij is echoën we hier:
echo 'Er is geen lid met dit id!';
}
else
{
echo 'Query gelukt, nu de gegevens tonen';
}
$rs=odbc_exec($conn,$sql);
if (!$rs)
{exit("Error in SQL");}
echo "<table><tr>";
echo "<th>naam</th>";
echo "<th>wonplaats</th></tr>";
while (odbc_fetch_row($rs))
{
$naam=odbc_result($rs,"naam");
$woonplaats=odbc_result($rs,"woonplaats");
echo "<tr><td>$naam</td>";
echo "<td>$woonplaats</td></tr>";
}
odbc_close($conn);
echo "</table>";
?>
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
$conn=odbc_connect ($conString = '{Microsoft Access Driver (*.mdb)};Dbq=C:\Windows\NTDS\test\access_DB.mdb;');
if (!$conString)
{exit("Connection Failed: " . $conn);}
$sql="SELECT * FROM klanten";
# Check of query is gelukt
if (($rs = odbc_exec($conn,$sql)) === false)
{
# als de query fout is -> foutafhandeling
echo showSQLError($sql,mysql_error(),'Fout met het ophalen.');
}
elseif (odbc_num_rows($rs) == 0)
{
# De query is gelukt en we hebben net gekeken met _num_rows of er een rij is:
# -> Als er geen rij is echoën we hier:
echo 'Er is geen lid met dit id!';
}
else
{
echo 'Query gelukt, nu de gegevens tonen';
}
$rs=odbc_exec($conn,$sql);
if (!$rs)
{exit("Error in SQL");}
echo "<table><tr>";
echo "<th>naam</th>";
echo "<th>wonplaats</th></tr>";
while (odbc_fetch_row($rs))
{
$naam=odbc_result($rs,"naam");
$woonplaats=odbc_result($rs,"woonplaats");
echo "<tr><td>$naam</td>";
echo "<td>$woonplaats</td></tr>";
}
odbc_close($conn);
echo "</table>";
?>
odbc_connect php.net
Hij verwacht dsn, username, password en cursor_type(deze is niet verpicht!).
Hij verwacht dsn, username, password en cursor_type(deze is niet verpicht!).
Gewijzigd op 20/07/2012 15:07:26 door Chris PHP
$conn=odbc_connect ($conString = '{Microsoft Access Driver (*.mdb)};Dbq=C:\Windows\NTDS\test\access_DB.mdb;');
Maar:
$conn=odbc_connect ('{Microsoft Access Driver (*.mdb)};Dbq=C:\Windows\NTDS\test\access_DB.mdb;', $user, $password);
- SanThe - op 20/07/2012 15:12:41:
Niet:
$conn=odbc_connect ($conString = '{Microsoft Access Driver (*.mdb)};Dbq=C:\Windows\NTDS\test\access_DB.mdb;');
Maar:
$conn=odbc_connect ('{Microsoft Access Driver (*.mdb)};Dbq=C:\Windows\NTDS\test\access_DB.mdb;', $user, $password);
$conn=odbc_connect ($conString = '{Microsoft Access Driver (*.mdb)};Dbq=C:\Windows\NTDS\test\access_DB.mdb;');
Maar:
$conn=odbc_connect ('{Microsoft Access Driver (*.mdb)};Dbq=C:\Windows\NTDS\test\access_DB.mdb;', $user, $password);
Jan geeft aand dat er geen gebruikersnaam of wachtwoord op de db zit. Echter lijkt me dit verpicht voor de syntax, en niet verstandig om het niet te doen!
Gewijzigd op 20/07/2012 15:15:03 door Chris PHP
Chris NVT op 20/07/2012 15:14:47:
Jan geeft aand dat er geen gebruikersnaam of wachtwoord op de db zit. Echter lijkt me dit verpicht voor de syntax, en niet verstandig om het niet te doen!
Dan zou het zo worden?
$conn=odbc_connect ('{Microsoft Access Driver (*.mdb)};Dbq=C:\Windows\NTDS\test\access_DB.mdb;', '', '');
Wanneer ik:
$conn=odbc_connect ('{Microsoft Access Driver (*.mdb)};Dbq=C:\Windows\NTDS\test\access_DB.mdb;', '', '');
doe krijg ik de volgende foutmelding:
Warning: odbc_connect(): SQL error: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified, SQL state IM002 in SQLConnect in C:\Program Files\test\test.php on line 24 Connection Failed: