CR4*_*R47 1 php mysql phpmyadmin key-value-store
这是我的数组:
$person = array(
"fullname" => $fn,
"skin_shade" => $_POST['skin_shade'],
"acne" => $_POST['acne'],
"dry_skin" => $_POST['dry_skin'],
"oily_skin" => $_POST['oily_skin'],
"wrinkles_aging" => $_POST['wrinkles_aging'],
"sensative_skin" => $_POST['sensative_skin'],
"darkspots" => $_POST['darkspots'],
"hair_type" => $_POST['hair_type'],
"parabens" => $_POST['parabens'],
"sulfates" => $_POST['sulfates'],
"mineral_oil" => $_POST['mineral_oil'],
"silicones" => $_POST['silicones'],
"relaxed" => $_POST['relaxed'],
"colortreated" => $_POST['colortreated'],
"thinning" => $_POST['thinning'],
"growth" => $_POST['growth'],
"braidout" => $_POST['braidout'],
"roller" => $_POST['roller'],
"wng" => $_POST['wng'],
"heat" => $_POST['heat'],
"wig" => $_POST['wig'],
"braid" => $_POST['braid'],
"dreadlocks" => $_POST['dreadlocks'],
"henna" => $_POST['henna'],
"hair_color" => $_POST['hair_color'],
"hair_style" => $_POST['hair_style'],
);
Run Code Online (Sandbox Code Playgroud)
这是我尝试插入它并得到错误的地方:
$columns = implode(", ",array_keys($person));
$escaped_values = array_map('mysql_real_escape_string', array_values($person));
$values = implode(", ", $escaped_values);
$sql = "INSERT INTO people ($columns) VALUES ('$values')";
mysql_query($sql) or die (mysql_error());
Run Code Online (Sandbox Code Playgroud)
我还在列和值上使用了print_r以确保它们的大小相同:
print_r($columns); echo"</br></br>";
print_r($values);
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出:
fullname,skin_shade,痤疮,dry_skin,oily_skin,wrinkles_aging,sensative_skin,darkspots,hair_type,parabens,sulfates,mineral_oil,silicones,relax,colortreated,thinning,growth,braidout,roller,wng,heat,wig,braid,dreadlocks,henna, hair_color,hair_style
Chris Runo,2,No,Yes,No,Yes,Yes,No,No,No,No,No,No,No,No,No,No,No,No,No,Yes,No,No,No,No,No,No,No,No,No,No,No,No ,dark_brown,经典
我还检查了我的MySQL表,有27列.
$sql = "INSERT INTO people ($columns) VALUES ('$values')";
Run Code Online (Sandbox Code Playgroud)
这将把一个字符串文字放入VALUES子句中,这是一个包含以逗号分隔的值列表的单引号字符串:
INSERT INTO people (...columns...) VALUES ('Chris Runo, 2, No, Yes, No, Yes, Yes, No, Straight, No, No, No, No, No, No, No, Yes, No, No, No, No, No, No, No, No, dark_brown, classic')
Run Code Online (Sandbox Code Playgroud)
要解决这个问题,您可以编写自己的引用/转义函数并在array_map()中使用它:
function myquote($val)
{
return "'" . mysql_real_escape_string($val) . "'";
}
$escaped_values = array_map('myquote', array_values($person));
$values = implode(", ", $escaped_values);
$sql = "INSERT INTO people ($columns) VALUES ($values)";
Run Code Online (Sandbox Code Playgroud)
否则你可以放弃弃用的mysql_*函数,并使用PDO,这样可以更容易地编写SQL注入安全的查询:
$columns = implode(", ",array_keys($person));
$params = implode(",", array_fill(0, count($person), "?"));
$sql = "INSERT INTO people ($columns) VALUES ($params)";
$stmt = $pdo->prepare($sql) or die(print_r($pdo->errorInfo(), true));
$stmt->execute(array_values($people)) or die(print_r($stmt->errorInfo(), true));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
543 次 |
最近记录: |