在db.php中将post数组格式化为class.php和PDO insert函数
我想知道在提交表单发布值和使用PDO Insert函数将值输入数据库时,您是否可以帮助我解决一个问题。一旦有人能帮我找到问题,我就可以在表单区域再次使用代码。我已经检查了$conn PDO语句,它已正确连接到数据库,只是我无法从表单插入数据 我的编码布局: 表单位于cust_Form.php中,表单字段的名称与数据库中相同,但插入时生成的autoID除外。 php用于获取POST值并发送到位于db.php中的Insert函数 db.php在db.php中将post数组格式化为class.php和PDO insert函数,php,mysql,database,forms,pdo,Php,Mysql,Database,Forms,Pdo,我想知道在提交表单发布值和使用PDO Insert函数将值输入数据库时,您是否可以帮助我解决一个问题。一旦有人能帮我找到问题,我就可以在表单区域再次使用代码。我已经检查了$conn PDO语句,它已正确连接到数据库,只是我无法从表单插入数据 我的编码布局: 表单位于cust_Form.php中,表单字段的名称与数据库中相同,但插入时生成的autoID除外。 php用于获取POST值并发送到位于db.php中的Insert函数 db.php <?php //dbdt database cla
<?php
//dbdt database class
if(!class_exists('dbdt')){
class dbdt {
//Connect and select database
function connect() {
try {
require_once('config.php');
$conn = new PDO('mysql:host=localhost;dbname=displaytrends', $DB_USER, $DB_PASS);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
//Connect to above
function __construct() {
$this->connect();
}
//Insert data into database
function insert($conn, $table, $fields, $values) {
try{
$fields = implode(", ", $fields);
$values = implode(", ", $values);
$insert = "INSERT INTO $table (autoID, $fields) VALUES ('', $values)";
$query = $handler->prepare($insert);
$query->execute();
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
}
}
$dbdt = new dbdt;
?>
您不需要发送字段参数,因为如果该数组的顺序与值的顺序不同,则代码将无法工作。使用以下值中的数组键:
//Insert data into database
function insert($conn, $table, $values) {
try {
$keys = array_keys($values);
$fields = implode(", ", $keys);
$values = ":" . implode(", :", $keys);
$insert = "INSERT INTO $table ($fields) VALUES ($values)";
$query = $handler->prepare($insert);
foreach ($values as $key => &$value) {
switch(gettype($value)) {
case 'integer':
case 'double':
$query->bindParam(':' . $key, $value, PDO::PARAM_INT);
break;
default:
$query->bindParam(':' . $key, $value, PDO::PARAM_STR);
}
}
$query->execute();
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
希望能有帮助。没有完整的代码,我无法测试它
PS:避免在不使用bindParam的情况下使用prepare来执行SQL语句,因为必须引用字符串,而不是整数或浮点数。var\u dump$value;看看那里发生了什么。这将告诉你你的价值观经历了什么。你知道为什么它不起作用。检查PHP和SQL方面的错误。您可能希望在insert查询中将变量用单引号括起来:$insert=insert INTO'$table'autoID',$fields'VALUES',$VALUES';并遵循上面@Fred ii的建议--检查您的错误日志etc@MichaelDoye部分是的。但在“$table”autoID“$fields”中插入的是“表/列的记号,而不是单引号”。仅适用于字符串值。工作编辑的代码在上面有您的帮助,谢谢!您好,$handler在上面的代码中来自哪里?复制/粘贴问题。可能是$conn参数。他使用$query=$conn->prepare$insert;编辑了带有解决方案的问题;。
<!doctype html>
<?php
require_once('load.php');
?>
<html>
<head>
<meta charset="UTF-8">
<title>Customer Form</title>
</head>
<body>
<form action="" method="POST" name="cust_details_form" id="cust_details_form">
<label>Account No:</label>
<input type="text" name="int_custID" id="int_custID" />
<label>Company:</label>
<input type="text" name="cust_company" id="cust_company"/>
<label>Address:</label>
<textarea type="text" rows=5 name="cust_address" id="cust_address"></textarea>
<label>Postcode:</label>
<input type="text" name="cust_postcode" id="cust_postcode"/>
<label>Contact 1:</label>
<input type="text" name="cust_contact_1" id="cust_contact_1"/>
<label>Contact 2:</label>
<input type="text" name="cust_contact_2" id="cust_contact_2"/>
<label>Telephone:</label>
<input type="text" name="cust_tel" id="cust_tel"/>
<label>Mobile:</label>
<input type="text" name="cust_mob" id="cust_mob"/>
<label>DDI:</label>
<input type="text" name="cust_DDI" id="cust_DDI"/>
<label>Email:</label>
<input type="email" name="cust_email" id="cust_email"/>
<label>Notes:</label>
<textarea type="text" rows=5 colums=1 name="cust_notes" id="cust_notes"></textarea>
<input type="submit" name="cust_upd" id="cust_upd" value="Update">
<input type="submit" name="cust_del" id="cust_del" value="Delete">
</form>
</body>
</html>
function ins_upd($table, $values) {
try{
include('config.php');
$conn = new PDO('mysql:host=localhost;dbname=displaytrends;charset=utf8', $DB_USER, $DB_PASS);
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
//Strip $_POST array to fields with values
$values=array_filter($values);
//Take array keys from array
$field_keys=array_keys($values);
//Implode for insert fields
$ins_fields=implode(",", $field_keys);
//Implode for insert value fields (values will binded later)
$value_fields=":" . implode(", :", $field_keys);
//Create update fields for each array create value = 'value = :value'.
$update_fields=array_keys($values);
foreach($update_fields as &$val){
$val=$val." = :".$val;
}
$update_fields=implode(", ", $update_fields);
//SQL Query
$insert = "INSERT INTO $table ($ins_fields) VALUES ($value_fields) ON DUPLICATE KEY UPDATE $update_fields";
$query = $conn->prepare($insert);
//Bind each value based on value coming in.
foreach ($values as $key => &$value) {
switch(gettype($value)) {
case 'integer':
case 'double':
$query->bindParam(':' . $key, $value, PDO::PARAM_INT);
break;
default:
$query->bindParam(':' . $key, $value, PDO::PARAM_STR);
}
}
$query->execute();
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
//Insert data into database
function insert($conn, $table, $values) {
try {
$keys = array_keys($values);
$fields = implode(", ", $keys);
$values = ":" . implode(", :", $keys);
$insert = "INSERT INTO $table ($fields) VALUES ($values)";
$query = $handler->prepare($insert);
foreach ($values as $key => &$value) {
switch(gettype($value)) {
case 'integer':
case 'double':
$query->bindParam(':' . $key, $value, PDO::PARAM_INT);
break;
default:
$query->bindParam(':' . $key, $value, PDO::PARAM_STR);
}
}
$query->execute();
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}