【问题标题】:Mysqli, fetch->fileld type to bind_param typeMysqli, fetch->field 类型为 bind_param 类型
【发布时间】:2012-11-15 14:51:04
【问题描述】:

我正在开发一个 php 类生成器。基本上它在mysql中获取指定的表并相应地生成类。你会明白的:

....
$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-&gt;type,它会为您提供该类型的数值(请参阅http://php.net/manual/en/mysqli-result.fetch-field.php)。

有没有办法直接获取数据类型对应的字母? (s,i,d,b) 还是我真的需要做一个函数将数字(fetch_field->type)转换为对应的字母?

仅供参考:目前它输出如下内容:

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;
}

我知道它不完整,但这是另一个问题;) 干杯

【问题讨论】:

    标签: php mysqli sqldatatypes


    【解决方案1】:

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

    您可以像这样通过查询您的数据库的示意图来获取 clomun y 的数据类型:

    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

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 2019-02-18
      相关资源
      最近更新 更多