我正在使用一个php类生成器。基本上它采用mysql中的指定表并按顺序生成类。你会明白这个想法:
....
$sql_r = mysqli_query($sql_conn, "select * from $sql_table;");
$sql_Fs = $sql_r->fetch_fields();
?>
<pre class="php">
<?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,i,d,b)或者我真的需要创建一个函数来从数字(fetch_field-&gt;类型)转换为相应的字母?
仅供参考:目前输出的内容如下:
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 :(得分:0)
我在这里发布我的解决方案,以防它可以帮助某人。
你可以得到一个clomun y的数据类型,就像你这样查询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