当我将这种类型的数值直接插入Mysql数据库时,我得到了这样的错误
#1064 - 您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在':23:09Z,36840bd430637,成功,85.0,11457922,10.02,USD,X,M,59106737WV831'第1行附近使用正确的语法
和myquery是
INSERT INTO `transaction`(TIMESTAMP, CORRELATIONID, ACK, VERSION, BUILD, AMT, CURRENCYCODE, AVSCODE, CVV2MATCH, TRANSACTIONID) VALUES (2014-06-26T02:23:09Z, 36840bd430637, Success, 85.0, 11457922, 10.02, USD, X, M, 59106737WV831451U)
我的代码是
$columns = implode(", ",array_keys($result_array));
$escaped_values = array_map('mysql_real_escape_string', array_values($result_array));
$values = implode(", ", $escaped_values);
echo $sql = "INSERT INTO `transaction`($columns) VALUES ($values)";
$res =mysql_query($sql);
我可以做些什么改变?
答案 0 :(得分:1)
首先,您应该转义列名称(并非总是需要):
$cols = join(',', array_map(function($name) {
return '`' . str_replace('`', '``', $name) . '`';
}, array_keys($result_array));
然后,请记住mysql_real_escape_string()
没有添加引用的附件:
$vals = join(',', array_map(function($value) {
return "'" . mysql_real_escape_string($value) . "'";
}, $result_array);
$sql = "INSERT INTO `transaction` ($cols) VALUES ($vals)";
最后,不推荐使用mysql_
函数,您应该继续使用PDO或mysqli。
答案 1 :(得分:0)
echo $ sql的含义是什么?试试这种方式&你也可以先逃避你的字符串。
foreach($singleRow as $key=>$data) //for multiple rows
{
if(isset($data)){
$dataArray[$key] = is_string($data) ? mysql_real_escape_string($data) : $data;
}
}
$tableName='transaction';
$keys = implode(',',array_keys($dataArray));
$data_values = ("'".implode("','",array_values($dataArray))."'");
$insertSql = "INSERT INTO ".$tableName." ($keys) VALUES ($data_values)";
$res =mysql_query($insertSql );
use mysqli_* and PDO anyway