php-当必须插入varchar时如何将数组插入MySQL
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-当必须插入varchar时如何将数组插入MySQL,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6013字,纯文字阅读大概需要9分钟。
内容图文
![php-当必须插入varchar时如何将数组插入MySQL](/upload/InfoBanner/zyjiaocheng/882/8ce607070b55481282de283c6f92c9e2.jpg)
See the image here我有一个收集以下信息的表格:year(int),案例编号(varchar)和收到时间(varchar).由于year是一个数字,因此我在MySQL中设置了int,然后Case number和Time Received同时具有数字和字母,因此我在MYSQL中设置了varchar.我使用了数组,因为我插入了很多记录.我使用mysql_real_escape_string()作为数组.但这没有用.如何传递包含字母,符号和数字的数组插入MySQL?谢谢.
//Output any connection error
if ($mysqli->connect_error) {
die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}
if (isset($_REQUEST['submit']) && isset($_REQUEST['year']) ) {
foreach ($_REQUEST['year'] as $k=> $value ){ // loop through array
$year = $_REQUEST['year'];
$c_no = mysql_real_escape_string($_REQUEST['cs']);
$t_r = mysql_real_escape_string($_REQUEST['t_r']);
$mysqli->query("INSERT INTO firearms_id_secs (year, case_no, t_received) VALUES
($year[$k], $c_no[$k], $t_r[$k])");
}
}
?>
这是HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Add more fields using jQuery</title>
<script src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var maxField = 10; //Input fields increment limitation
var addButton = $('.add_button'); //Add button selector
var wrapper = $('.field_wrapper'); //Input field wrapper
var fieldHTML = '<div><input type="text" name="year[]" value="" placeholder="Year"/><input type="text" name="cs[]" value="" placeholder="Case no"/><input type="text" name="t_r[]" value="" placeholder="Time Received"/><a href="javascript:void(0);" class="remove_button" title="Remove field"><img src="remove-icon.png"/></a></div>'; //New input field html
var x = 1; //Initial field counter is 1
$(addButton).click(function(){ //Once add button is clicked
if(x < maxField){ //Check maximum number of input fields
x++; //Increment field counter
$(wrapper).append(fieldHTML); // Add field html
}
});
$(wrapper).on('click', '.remove_button', function(e){ //Once remove button is clicked
e.preventDefault();
$(this).parent('div').remove(); //Remove field html
x--; //Decrement field counter
});
});
</script>
<style type="text/css">
input[type="text"]{height:20px; vertical-align:top;}
.field_wrapper div{ margin-bottom:10px;}
.add_button{ margin-top:10px; margin-left:10px;vertical-align: text-bottom;}
.remove_button{ margin-top:10px; margin-left:10px;vertical-align: text- bottom;}
</style>
</head>
<body>
<form name="codexworld_frm" action="" method="post">
<div class="field_wrapper">
<div>
<a href="javascript:void(0);" class="add_button" title="Add field"><img src="add-icon.png"/></a>
</div>
</div>
<input type="submit" name="submit" value="SUBMIT"/>
</form>
</body>
</html>
解决方法:
提交表单后,_POST(或_REQUEST)将如下所示
array (
'year' =>
array (
0 => '2001',
1 => '2010',
),
'cs' =>
array (
0 => '1',
1 => '2',
),
't_r' =>
array (
0 => '12:00:00',
1 => '13:00:00',
),
'submit' => 'SUBMIT',
)
如果看起来像这样会更好
array(
'records' = array(
0=>array('year'=>'2001', 'cs'=>'1', 't_r'=>'12:00:00'),
0=>array('year'=>'2010', 'cs'=>'2', 't_r'=>'13:00:00'),
),
)
那将需要更改javascript代码(并且我现在对此太懒了…所以我正在使用SPL MultipleIterator来“模拟”该数据格式)
if ( isset($_POST['submit']) ) {
// add tests for is_array() POST[year], POST[cs] and POST[t_r]
// this will make mysqli throw an exception whenever an operation results in an
// (mysql) error code other than 0 -> no further error handling included in this script....
mysqli_report(MYSQLI_REPORT_ALL|MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'localonly', 'localonly', 'test');
// create a prepared statement and bind the parameters, see http://docs.php.net/mysqli.quickstart.prepared-statements
$stmt = $mysqli->prepare('INSERT INTO firearms_id_secs (year, case_no, t_received) VALUES (?,?,?)');
if ( !$stmt->bind_param('sss', $year, $caseno, $time) ) { // binding all parameters as strings ...let mysql's type system handle it...
yourErrorHandlerHere(); // or throw an exception....
}
// when ever the statement is executed, the current values (at _that_ moment) in $year, $caseno and $time will be used where the ? are in the statement
// this wouldn't be necessary if the POST body looked like record[1][year]=2001&....
$mit = new MultipleIterator;
$mit->attachIterator( new ArrayIterator($_POST['year']) );
$mit->attachIterator( new ArrayIterator($_POST['cs']) );
$mit->attachIterator( new ArrayIterator($_POST['t_r']) );
foreach( $mit as $record ) {
echo 'executing statement with [', join(',', $record), "]<br/>\r\n";
// assign the values to the bound parameters
list($year,$caseno,$time) = $record;
// and then execute the statement (with those values)
/*
you might want to wrap this in a try-catch block, so a single faulty record will not throw off your entire script.
You might also want to look into transactions (in case a single faulty record is supposed to roll back the entire operation)
see http://docs.php.net/language.exceptions , http://dev.mysql.com/doc/refman/5.7/en/commit.html
*/
$stmt->execute();
}
}
编辑:
a)要允许NULL值,应在参数中将空字符串替换为NULL
...
// replace empty strings by NULL
$record = array_map(
function($e) {
return 0<strlen(trim($e)) ? $e : NULL;
},
$record
);
// assign the values to the bound parameters
list($year,$caseno,$time) = $record;
...
b)在这种情况下,我不知道为什么和在哪里需要迭代器的密钥,但是….
<?php
$data=array(
'maj'=>new ArrayIterator(array('A','B','C')),
'min'=>new ArrayIterator(array('a','b','c')),
'foo'=>new ArrayIterator(array('do'=>'re', 'mi'=>'fa', 'so'=>'la', 'ti')),
);
$mit = new MultipleIterator(MultipleIterator::MIT_NEED_ANY|MultipleIterator::MIT_KEYS_ASSOC);
$mit->attachIterator( $data['maj'], 'majuscule' );
$mit->attachIterator( $data['min'], 'minuscule' );
$mit->attachIterator( $data['foo'], 'lalala' );
foreach( $mit as $r ) {
var_export($r);
}
版画
array (
'majuscule' => 'A',
'minuscule' => 'a',
'lalala' => 're',
)array (
'majuscule' => 'B',
'minuscule' => 'b',
'lalala' => 'fa',
)array (
'majuscule' => 'C',
'minuscule' => 'c',
'lalala' => 'la',
)array (
'majuscule' => NULL,
'minuscule' => NULL,
'lalala' => 'ti',
)
内容总结
以上是互联网集市为您收集整理的php-当必须插入varchar时如何将数组插入MySQL全部内容,希望文章能够帮你解决php-当必须插入varchar时如何将数组插入MySQL所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。