ここに私の配列があります:
protected static $db_fields = array('id', 'username', 'password');
これが私がそれをどのように使用するかです:
protected function attributes(){
$attributes = array();
foreach(static::$db_fields as $field){
$attributes[$field] = $this->$field;
}
return $attributes;
}
属性の使用方法は次のとおりです。
protected function create(){
global $database;
$attributes = $this->sanitized_attributes();
$sql = "INSERT INTO " . static::$table_name . " (";
$sql .= join(", ", array_keys($attributes));
$sql .= ") VALUES ('";
$sql .= join("', '", array_values($attributes));
$sql .= "')";
if($database->query($sql)){
$this->id = $database->inserted_id();
return TRUE;
}else{
return FALSE;
}
}
私がする必要があるのは、データベースからその db_fields 配列を直接生成し、私が行ったように手動で割り当てることだけです。「SHOW COLUMNS FROM」テーブル名で遊んでみましたが、うまくいきませんでした。
列を表示:
function attributes(){
global $database;
$attributes = array();
$sql = "SHOW COLUMNS FROM " . static::$table_name;
$result = $database->query($sql);
$db_fields = mysql_fetch_assoc($result);
for($i = 0; $i < mysql_num_rows($result); $i++){
while ($db_fields = mysql_fetch_assoc($result)) {
$attributes[] = $db_fields['Field'];
}
}
return $attributes;
}
私の最終的なアプローチは、次のような配列にする必要があります。
$db_fields = ('column1_name', 'column2_name', 'column3_name')
私の現在の「SHOW COLUMNS」プレイアラウンドの結果は、列の名前と同じように、username: username、password: password ... の値を作成することです。
これらの列名を配列に割り当てる方法が問題だと思います。では、そのような配列を作成するための正しいクエリは何でしょうか?
最終的に私はそれを解決しました:
protected static $db_fields;
function __construct(){
self::generate_attributes();
}
protected static function generate_attributes(){
$sql = "SHOW COLUMNS FROM admins";
$result = mysql_query($sql);
$rows = mysql_fetch_assoc($result);
for($i = 0; $i < mysql_num_rows($result); $i++){
while ($rows = mysql_fetch_assoc($result)) {
self::$db_fields[] = $rows['Field'];
}
}
return self::$db_fields;
}
protected function attributes(){
$attributes = array();
foreach(static::$db_fields as $field){
$attributes[$field] = $this->$field;
}
return $attributes;
}
助けてくれてありがとう。