Ragazzi io ho necessità di importare dati in xml nel database mysql.
ho creato questo script
Codice PHP:
<?php
//generatore automatico di codice crud Come generare in modo automatico il codice, creare, leggere, aggiornare e cancellare tabelle in un dababase. Questo libro contiene vari hack in grado di velocizzare la realizzazione del codice di accesso ai database tramite la generazione automatica delle istruzioni php e sql necessarie alla creazione, lettura, aggiornamento cancellazione del record (in gergo crud). IN quest esempio crea delle classi in grado di creare codice
$tables=array();
function start_element($parser,$name,$attribs)
{
global $tables;
if($name=="TABLE")
{
$table=array();
$fields=array();
$table['name']=$attribs['NAME'];
$table['fields']=array();
$tables[]=$table;
}
if($name== "FIELD")
{
$field=array();
$field['name']=$attribs['NAME'];
$field['type']=$attribs['TYPE'];
$field['pk']=($attribs['PRIMARY-KEY']=="true")? 1:0;
$tables[count($tables)-1]['fields'][]=$field;
}
}
function end_element($parser, $name){}
$parser=xml_parser_create();
xml_set_element_handler($parser, "start_element","end_element");
$file = fopen("prova.xml", "r");
while(!feof($file)){
$text=fgets($file);
xml_parse($parser, $text);
}
xml_parser_free($parser);
ob_start();
echo("<?php\n");
?>
require_once("dbwrap.php");
<?php
foreach($tables as $table){
$pk=null;
$updsets=array();
$ufdfields=array();
$insfields=array();
$insvalues=array();
$insvars = array();
foreach($table['fields'] as $field){
$insfields[]=$field['name'];
if($field['pk'])
{
$pk=$field['name'];
$insvalues[]=0;
}
else
{
$updsets[]=$field['name']."=?";
$updfields[]= '$this->'.$field['name'];
$insvalues[]='?';
$insvars[]='$this->'.$field['name'];
}
}
$insvars=join($insvars,",");
$insvalues=join($insvalues,",");
$insfields=join($insfields,",");
$updfields[]='$this->'.$pk;
$updfields=join(updfields,",");
$updsets=join($updsets,",");
?>
class <?php echo(ucfirst($table['name']))?>
{
<?php
foreach($table['fields'] as $$field){
?>
var $<?php echo($field['name']);?>;
<?php
}
?>
function <?php echo($ucfirst['name']);?>()
{
$this->id=null;
}
function load($id)
{
$data=selectOne("SELECT * FROM <?php echo($table['name'])?>WHERE <?php echo($pk);?>= ?", array($id));
<?php
foreach($table['fields']as $field){
?>
$this-><?php echo($field['name']); ?> =$data['<?php echo($field['name']);
?>'];
<?php
}
?>
}
<?php
foreach($table['fields']as $field){
?>
function get_<?php echo($field['name'])?>(){ return $this-><?php echo(
$field['name'])?>;}
function set_<?php echo($field['name'])?>($val){$this-><?php echo($field['name'])?>=$val;}
<?php
}
?>
function update()
{
if($this->id !=null){$this->updateRecord();}
else {$this->insertRecord();}
}
function insertRecord()
{
return executeCommand("INSERT INTO <?php echo($table['name'])?>(<?php
echo($insfields);?>)VALUES (<?php echo($insvalues); ?>)",
array(<?php echo ($insvars);?>));
}
function updateRecord()
{
return executeCommand("UPDATE <?php echo($table['name'])?> SET <?php
echo($updsets);?>WHERE <?php echo($pk);?>=?",
array(<?php echo($updfields);?>));
}
function deleteRecord($id)
{
return executeCommand("DELETE FROM <?php echo($table['name'])?>WHERE
<?PHP echo ($pk);?>=?",array($id));
}
}
<?php }
echo("?>");
$php=ob_get_clean();
echo $php;
$fh=fopen("mydb.php","w");
fwrite($fh, $php);
fclose($fh);
?>
questo file collegato ad un altro file, dovrebbe legger xml e poi creare mybd.php e riportare i dati da poi inserire nel dabatabase. Il file lo genera, mette
Codice PHP:
<?php
require_once("dbwrap.php");
?>
e basta invece dovrebbe mettere anche i dati di xml
pronti poi per essere o aggiornati o cancellati o inseriti, come posso risolvere? o questo file è completamente sbagliato e non mi serve a nulla?
la pagina dbwrap.php è questa:
Codice PHP:
<?php
//gestisce la connessione ad un database specifico. Dovrete avere uno di questi script per ciascun database a cui volete connettervi
require_once("DB.php");
$dns='mysql://root:password@localhost/amministratore';
$db=& DB::Connect($dsn, array());
if(PEAR::isError($db)){die($db->getMessage());}
function selectOne($sql, $args)
{
global $db;
$res=$db->query($sql, $args);
$res->fetchInto($row, DB_FETCHMODE_ASSOC);
return $row;
}
function selectBlock($sql, $args);
global $db;
$res=$db->query($sql, $args);
$rows=array();
while($res->fetchInto($row, DB_FETCHMODE_ASSOC)){$rows[]=$row;}
return $rows;
}
function executeCommand($sql, $args);
global $db;
$sth=$db->prepare($sql);
return $db->execute($sql, $args);
?>