【问题标题】:PHP MYSQL 'INSERT INTO $table VALUES ......' variable number of fieldsPHP MYSQL 'INSERT INTO $table VALUES ......' 可变字段数
【发布时间】:2011-11-09 21:42:06
【问题描述】:

我仍在学习 PHP 和 MYSQL,并尝试制作一个程序来列出数据库中的所有表和数据(已完成),编辑选定的行(已完成),现在在选定的表上添加新记录。现在问题在于可变数量的字段。表可以有 3 个字段,也可以是 4 个,依此类推。在我的代码中 $getValue 是一个数组。我打印出来只是为了测试。它可能看起来像“Array ([name] => Tomas [lastName] => Timas)”或“Array ([stufName] => Phone [stufPrice] => 58 [cmets] => My new phone)” $getTable 返回要插入的表的名称。 这必须是表上的新记录,因此 stufID 或 nameID 或任何 ID 都将为 NULL 如果不知道值的个数,如何使用“INSERT INTO table VALUES (value1, value2, value3,...)”?

    <?php

include "conf.ini"; //connection to the db

$getValue=$_REQUEST['value'];
$getTable=$_REQUEST['table'];

// test********************
print_r($getValue);
print '<br>';
print $getTable;
// test********************

if (!$_POST['submit']) {
    print 'Please input data';
} else {

    mysql_query ("INSERT INTO $getTable VALUES (?????)");
}

?>

【问题讨论】:

  • 你不能在一个有 3 列的表中插入 4 个条目——如果这样做 MySQL 会给你一个错误。您说,您已经列出了所有表,我想您正在从information_schema 数据库中读取一致的信息。如果这样做,您还知道每个表的列数!?

标签: php mysql insert


【解决方案1】:

我希望你知道这非常危险,所以只有在你确定没有潜在的攻击者时才这样做!

$all_keys = array_keys($getValue);
$getValue = array_map('mysql_real_Escape_string', $getValues);
mysql_query ("INSERT INTO $getTable (`".implode('`,`', $all_keys)."`) VALUES ('".(implode(",", $getValue))."')");

【讨论】:

  • 这只是我的练习程序。这将永远不会直播。我会试试这个。谢谢
  • mysql_Real_escape_string 应该对每个值单独执行,而不是对所有值一起执行。你写的方式行不通。
  • @shesek:是的,这是真的。现在改了
【解决方案2】:
$values = array_map('mysql_real_escape_string', array_values($getValue));
$keys = array_keys($getValue);        
mysql_query("INSERT INTO $getTable (".implode(',', $keys).") VALUES ('".implode('\',\'', $values)."')");

【讨论】:

  • 请注意,这里假定array_keys() 和array_values() 会以相同的顺序返回相应的元素。
  • @cdhowie、array_keys() 和 array_values() 总是以相同的顺序返回元素。
  • PHP 文档并未表明函数以任何特定方式对其结果进行排序。
  • 德奎劳瑞奈。帕班迪修。 Dabar tik reikia issiaiskinti ka daro kiekviena komanda :)
【解决方案3】:

也许您应该创建一个包含文件来执行 $gettables 的值,然后将它包含在您希望获取 $gettables 值的位置。

【讨论】:

    猜你喜欢
    • 2010-10-26
    • 2015-04-12
    • 2020-06-07
    • 2012-07-06
    • 2011-12-04
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    相关资源
    最近更新 更多