2012-11-27 106 views
0

我正在工作一个PHP类生成器。基本上它会在mysql中使用指定的表并且一致地生成类。你会得到这样的想法:Mysqli,fetch-> fileld类型bind_param类型

.... 
$sql_r = mysqli_query($sql_conn, "select * from $sql_table;"); 
$sql_Fs = $sql_r->fetch_fields(); 
?> 
<pre class="php"> 
    &lt;?php 
    class <?php echo $sql_table; ?>{ 
     <?php foreach($sql_Fs as $sql_f) echo "var ".$sql_f->name."; "; ?> 

     function sql_insert(){ 
      $sql_conn = sql_conn(); 
      $sql_stmt =$sql_conn->prepare("INSERT INTO <?php echo $sql_table; ?> (<?php foreach($sql_Fs as $K=>$sql_f){ if($K>1){ echo ", ";} if($K>0){ echo $sql_f->name; }} ?>) VALUES (<?php foreach($sql_Fs as $K=>$sql_f){ if($K>1){ echo ", "; } if($K>0) {echo "?"; }} ?>)"); 

      $sql_stmt->bind_param('', <?php foreach($sql_Fs as $K=>$sql_f){ if($K>1){ echo ", "; } if($K>0){ echo "\$this->".$sql_f->name; }} ?>); 
           //^^^^ Need data type 

      if(!$sql_stmt->execute()){ error_log($sql_stmt->error); $R = false; }else{ $R = true; } 
      $sql_stmt->close(); $sql_conn->close(); return $R; 
     } 
     ..... 

我卡在哪里就是设置bind_param数据类型。我发现你可以得到fetch_field->type,它给你一个数字值(见http://php.net/manual/en/mysqli-result.fetch-field.php)。

有没有办法直接得到对应数据类型的字母? (s,我,D,B)或者我真的需要做一个函数来从数字(fetch_field->类型)转换为相应的字母?

FYI:目前像输出的东西:

function sql_insert(){ 
    $sql_conn = sql_conn(); 
    $sql_stmt =$sql_conn->prepare("INSERT INTO user (flag, name, mail, pass) VALUES (?, ?, ?, ?)"); 
    $sql_stmt->bind_param('', $this->flag, $this->name, $this->mail, $this->pass); 
    if(!$sql_stmt->execute()){ error_log($sql_stmt->error); $R = false; }else{ $R = true; } 
    $sql_stmt->close(); $sql_conn->close(); return $R; 
} 

我知道,是不完全的,但那是另一个问题) 欢呼

回答

0

我在这里发布我的解决方案它可以帮助某人。

你可以得到一个clomunŸquering你示意图的数据类型DB像这样:

SELECT 
    COLUMN_NAME, 
    DATA_TYPE, 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_name = '$sql_table' 
AND table_schema = '$sql_database'; 

其他一些野趣的信息你可以从这个查询获得:

IS_NULLABLE 
CHARACTER_MAXIMUM_LENGTH 
COLUMN_KEY 

官方文档: http://dev.mysql.com/doc/refman/5.0/en/columns-table.html