[shell] LDFLAGS="-L/usr/lib -L/usr/local/sapdb/indep_prog/lib" \ CPPFLAGS="-I/usr/local/sapdb/indep_prog/incl" \ ./configure --prefix=/usr/local/php-4.2 \ --with-apxs2=/usr/local/apache2/bin/apxs \ --with-sapdb=/usr/local/sapdb/indep_prog/lib \ ...suite des options de compilation... [shell] export LDFLAGS=-L/usr/local/sapdb/indep_prog/lib; make [shell] make install
Si je n'indique pas tous ces flags j'ai des erreurs de compilation (gcc 2.95). Sinon c'est une compilation tranquille.
Il va falloir mettre un odbc.ini, le fichier qui contient les DSN, Data Source Names, dans /etc
; ; /etc/odbc.ini ; [ODBC Data Sources] NomDeSource=MAXDB 7.5 [NomDeSource] Driver=/usr/local/sapdb/indep_prog/lib/libsqlod.so Description=MAXDB 7.5 DATABASE ServerDB=MAILS ServerNode=localhost
Et ça devrait le faire, il n'y a plus qu'à écrire quelques lignes de code.
Remarque:Il ne doit pas y avoir d'espace entre la variable et la valeur de la variable !
Il y a là différentes requêtes, notez l'utilisation de odbc_result_all() avec son formatage, fonction intéressante pour des affichages de champs qui ne contiennent pas de balises html. Comme un Message-Id par exemple avec ses < et >. Je n'ai pas chiadé la présentation avec de la couleur mais on doit pouvoir.
Pour un insert, c'est du pareil au même.
Je n'ai pas encore testé la syntaxe utilisant le ? dans le odbc_prepare() (cf
8.6). Mais je suppose que ça doit se faire avec le tableau passé en argument à
odbc_execute().
<?
$dsn="Courrieldb";
$conn_id = odbc_connect ($dsn, "jm", "jm_passwd") or die ("odbc_connect(): erreur\n");
$sql1 = "SELECT subject FROM courriel WHERE msgid LIKE '%murphy>'";
$prepare = odbc_prepare ($conn_id, $sql1);
odbc_execute ($prepare);
$item = odbc_result ($prepare, 1);
print ($item);
print ("<br><br><br>\n");
$sql2 = "SELECT msgid, mailfrom, subject ";
$sql2 .= "FROM courriel ";
$sql2 .= "WHERE subject LIKE '%Masq%'";
$prepare = odbc_prepare ($conn_id, $sql2);
odbc_execute ($prepare);
$rowid = 1;
while ($row = odbc_fetch_row ($prepare, $rowid))
{
$msgid = htmlspecialchars (odbc_result ($prepare, 1));
$from = htmlspecialchars (odbc_result ($prepare, 2));
$subject = odbc_result ($prepare, 3);
print ($msgid . " ..... " . $from . " ...... " . $subject . "<br>\n");
$rowid++;
}
print ("<br><br><br>\n");
odbc_autocommit ($conn_id, false);
$sql3 .= "SELECT maildate, subject ";
$sql3 .= "FROM courriel ";
$sql3 .= "WHERE subject LIKE '%Masq%'";
$result_id = odbc_prepare ($conn_id, $sql3);
odbc_execute ($result_id);
odbc_commit ($conn_id);
odbc_result_all ($result_id, "border=2 cellpadding=3 cellspacing=4");
odbc_close ($conn_id);
?>
A la place du $dsn, on peut indiquer la chaine hôte:base (entre guillemets donc), ça va bien aussi et ça permet de s'affranchir de l'odbc.ini
$sql = "SELECT msgid, mailfrom, subject ";
$sql .= "FROM courriel ";
$sql .= "WHERE subject LIKE '%Masq%'";
$sql .= "FOR UPDATE OF subject";
$result = odbc_prepare ($conn_id, $sql);
odbc_execute ($result);
$cursor = odbc_cursor ($result);
$sql2 = "UPDATE courriel SET subject = 'Casque' ";
$sql2 .= "WHERE CURRENT OF $cursor";
$rowid = 1;
while ($row = odbc_fetch_row ($result, $rowid))
{
odbc_exec ($conn_id, $sql2);
$rowid++;
}
La syntaxe du select indique qu'on veut générer un résultat pour une mise à jour du champ "subject".
On récupère le nom du curseur de résultat avec odbc_cursor() et on utilise la syntaxe du
WHERE CURRENT OF nom_curseur dans l'instruction UPDATE pour mettre à jour au niveau de
la position du curseur. Évidemment dans cet exemple on bouge le curseur donc il y a mise à jour sur
tous les enregistrements du résultat. On peut procéder à l'identique avec une instruction
DELETE.
jean-michel OLTRA 2004-07-06