注意:php中存在未定义的索引错误

注意:php中存在未定义的索引错误,php,mysql,xampp,Php,Mysql,Xampp,我的表中存储了带有分隔符/的数据。我需要将它们分开,并需要将它们存储在不同的表中。在这样做的同时,我得到: 注意:第21行/opt/lampp/htdocs/disease.php中未定义的索引:VSX1 如何解决这种错误 <html> <body> <?php $username = "root"; $password = "****"; $hostname = "localhost"; $dbha

我的表中存储了带有分隔符
/
的数据。我需要将它们分开,并需要将它们存储在不同的表中。在这样做的同时,我得到:

注意:第21行/opt/lampp/htdocs/disease.php中未定义的索引:VSX1

如何解决这种错误

<html>
<body>
    <?php
        $username = "root";
        $password = "****";
        $hostname = "localhost"; 
    $dbhandle = mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL");
        $selected = mysql_select_db("disease",$dbhandle) or die("Could not select disease");
    $result = mysql_query("SELECT * FROM `primary_data` LIMIT 0, 30");
        while($row = mysql_fetch_array($result))
        {
    $string = $row['gene_name'];
    $tok = strtok($string, "/");
    while ($tok !== false) {
    mysql_query("insert into temp_gene gene_name   values('".$_POST[$tok]."')");
        $tok = strtok("/");
    }

        }
        mysql_close($dbhandle);
    ?>
    </table>    
    </body>
    </html>


将数据从一个表传输到另一个表。您根本不需要$u POST变量! 当然,数据必须很好地转义

while (($tok = strtok($string, '/')) !== false) {
    $tok = mysql_real_escape_string($tok);
    mysql_query("INSERT INTO temp_gene(gene_name) VALUES('{$tok}')");
}

我赞同Brad的建议,即使用PDO和准备好的语句——这更优雅、更高效

这里有一些代码给你。。。因为我不知道您想对令牌大小等做什么。我还没有编写使用$gene_name做什么的逻辑,但我相信您会这么做=)

看看 我还建议您在PDO之上使用条令作为包装器/ORM,它使事情变得非常简单:


你所做的是难以置信的不安全。如果你还没有被黑客攻击过,你会被黑客攻击的。学习将准备好的/参数化查询与PDO或类似工具一起使用。此外,如果可以,请不要在表中存储带有分隔符的数据。可能的重复项
$dsn = "mysql:dbname={$db_name};host={$db_host}";
try {
    // init db handler.
    $db = new PDO( $dsn, $db_username, $password );

    // Execute selecting query.
    $select_sql = "SELECT gene_name FROM `primary_data` LIMIT 0, 30";
    $select_stmt = $db -> prepare( $sql );
    $select_stmt -> execute();

    // Bind row column 1 (1-indexed) to $gene_name.
    $select_stmt -> bindColumn( 1, $gene_name );

    // Prepare insert query to temp_gene.
    $temp_sql = "INSERT INTO temp_gene(gene_name) VALUES(?)";
    $temp_stmt = $db -> prepare( $temp_sql );

    // Begin transaction, it is more efficient to use transactions as your actual queries becomes 1 instead of O(rows).`enter code here`
    $db -> beginTransaction();

    while ( $row = $select_stmt -> fetch( PDO::FETCH_BOUND ) ) {
        $string =& $gene_name;

        // do your tokenizing logic here... also do escaping for security.

        $temp_stmt -> execute( array( $your_value_string ) );
    }

    // Commit the inserts.
    $db -> commit();
} catch (PDOException $e) {
    die( $e->getMessage() );
}