使用不同数据类型

时间:2017-10-27 08:52:30

标签: php mysql

您好我一直在尝试将数组插入MySql数据库

我遇到的问题是我有不同的数据类型,有时数据可以是0值,有()大括号,百分号值带%符号。我想知道一种方法可以使用一些已经构建的php函数来处理这个问题。

所以这就是我到目前为止所做的:

$t = array('country_code' => $data->country_code,   
           'Name' => $data->Name,
           'money' => $data->money,
           'chanceToDie' => $data->death,
           'age' => $cb->age)

/*  FORMAT EXAMPLE
    country_code = Africa (AF)
    name = jack
    chanceToDie = 5.5
    age = 62
*/

$columns = implode(", ",array_keys($t));

//Tried
$values = implode(", ",array_values($t));           //Dont work
$values = "'".implode("', '",array_values($t))."'";     //Dont work

$sql = "INSERT INTO table ($columns) VALUES ($values)";

2 个答案:

答案 0 :(得分:1)

您需要引用每个单独的值并使用array_values()代替array_keys()

$values = '"' . implode('", "', array_values($t)) . '"';

然而,这会给你留下一个sql注入问题,所以你应该使用一个预备语句。

在PDO中你可以使用类似的东西(假设你控制键并且它们可以安全使用):

$values = ':' . implode(', :', array_keys($t));
// generates: ... VALUES(:country_code, :Name, :money,  // etc

现在,您可以使用数组准备和执行查询,以将值绑定到占位符。参见例如http://php.net/manual/en/pdo.prepared-statements.php(第6个例子)。

答案 1 :(得分:1)

尝试利用PDO准备的查询的优势 - 它更安全,更方便。

您的代码可能如下所示:

$col_names = array_keys($t);
// filter column names before inserting to sql to prevent sql injection
array_filter($col_names, function($v){return preg_relace("@\W@", "_", $v);});
// generate placeholders list: ?,?,?,?
$placeholders = implode(',', array_fill(0, count(t), "?"));
$values = array_values($t);

$q = $pdo->prepare('insert into (' . implode(",", $col_names) . ') values (' . $placeholders . ')');
$q->execute($values);

PDO将处理数据类型并使用相应的值正确替换每个占位符。