【问题标题】:array set as a column name from an array using php mysql使用 php mysql 将数组设置为数组中的列名
【发布时间】:2013-12-15 16:41:43
【问题描述】:

我有一个 foreach 循环,它使用从站点收集的数组中的新列名创建一个表。目前只有数组的第一个元素被设置为列名,有人可以帮忙吗?

H 这是我的代码:

<?php
include 'simple_html_dom.php';
include 'connection.php';

function getsquad($url, $tablename){

$html = file_get_html($url);

$player_fromsite = array();

$space = ' ';
$replacespace = '_';

$player = array();

foreach($html->find('td[align=left]') as $element) {
   if ($element->children(0)) { // work only when children exists
          array_push($player_fromsite ,$element->children(0)->innertext);
   }
}

//$player[] = str_replace($space, $replacespace, $player_fromsite);
//unset($player_fromsite);

$length = count($player);

foreach($player_fromsite as $player_name) {
  mysql_query("CREATE TABLE " . $tablename . "(" . str_replace($space, $replacespace,     $player_name) . " VARCHAR(30))") or die(mysql_error());   
}

echo "Table Created!";

}

$Squad = new squad();
$Squad->getsquad('site', 'Ars');

?>

在 foreach 循环中,任何空格都被替换为“_”

【问题讨论】:

    标签: php mysql sql arrays foreach


    【解决方案1】:

    我不太确定我是否正确理解了您想要的内容:在$player_fromsite 中有一些字符串,它们应该成为名称来自$tablename 的新表的列,而所有列都是VARCHAR(30)

    如果是这样,请将最后一个 foreach 循环替换为以下内容:

    $columns = array();
    foreach ($player_fromsite as $player_name) {
        $columns[] = '`' . str_replace($space, $resplacespace, $player_name) . '` VARCHAR(30)';
    }
    $query = 'CREATE TABLE `' . $tablename . '` (' . implode(',', $columns) . ')';
    mysql_query($query) or die(mysql_error());
    

    foreach 循环基本上准备了所有列,然后将它们连接到发送到数据库的实际查询。

    例如 let $player_fromsite = array('foo', 'bar'),你会得到查询

    CREATE TABLE `Ars` (`foo` VARCHAR(30),`bar` VARCHAR(30));
    

    【讨论】:

    • 我有一条错误消息说“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取在 '–zil VARCHAR(30),Bacary_Sagna 附近使用的正确语法VARCHAR(30),Jack_Wilshere VARCHAR(30),Santi_Cazo' 在第 1 行”,这些是我试图将球员姓名放入列中。这是迄今为止最接近的
    • 我编辑了我的答案并在查询表和列名中添加了一些反引号,你能再试一次吗?
    • 哇,这成功了。我已经为此工作了几天,很多人说这是不可能的,但答案在这里。感谢您的代码
    • 反引号有什么作用?
    • 使用 backtics 可以在表名或列名中包含一些字符,这些字符通常由于语法限制而被禁止。因此,例如SELECT * FROM -foo 是一个语法错误,在表名周围添加反引号使其成为一个良好的查询。另见dev.mysql.com/doc/refman/5.0/en/identifiers.html
    猜你喜欢
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 2015-11-11
    • 2014-11-03
    相关资源
    最近更新 更多