我正在尝试使用数组将数据传递到数据库,但我不断收到此错误。我仔细检查了我的代码,看看我是否错过了一个列,但它看起来不像。 我做错了什么?
<?php
class inventario {
public function __construct() {}
public function insertar($info) {
if(isset($info)) {
$db_host = 'localhost';
$db_user = 'root';
$db_pass = 'root';
$db_name = 'inventory_cars';
$db_link = mysqli_connect($db_host, $db_user, $db_pass, $db_name) or die('No Connection');
$clean_info = mysqli_real_escape_string($db_link, array_values($info));
$query = mysqli_query( $db_link, "INSERT INTO cars(date, stock, year, make, model, vin, cr) VALUES('" . (string)$clean_info. "')") or die(mysqli_error($db_link));
if($query) {
return 'Record inserted';
}
mysqli_close($db_link);
}
else {
echo 'info variable not set';
}
}
public function table() {
$action = $_SERVER['PHP_SELF'];
$table = '<form name="insertar" method="post" action="' . $action . '"><table><tr><td>Date</td><td><input type="date" name="date"/></td></tr><tr><td>Stock#</td><td><input type="text" name="stock"/></td></tr><tr><td>Year:</td><td><input type="text" name="year"/></td></tr><tr><td>Make:</td><td><input type="text" name="make"/></td></tr><tr><td>Model:</td><td><input type="text" name="model"/></td></tr><tr><td>VIN:</td><td><input type="text" name="vin"/></td></tr><tr><td>CR:</td><td><input type="text" name="cr"/></td></tr><tr><td><input type="submit" value="Submit" name="submit"/></td></tr></table></form>';
return $table;
}
public function stock_list() {
$db_host = 'localhost';
$db_user = 'root';
$db_pass = 'root';
$db_name = 'inventory_cars';
$db_link = mysqli_connect($db_host, $db_user, $db_pass, $db_name) or die('No Connection');
$query = "SELECT * FROM cars";
$result = mysqli_query($db_link, $query) or die('Query fail.. Please wait...');
while($row = mysqli_fetch_array($result)) {
echo '<tr><td>' . $row['date'] . '</td><td>' . $row['year'] . '</td><td>' . $row['make'] . '</td><td>' . $row['model'] . '</td><td>' . $row['vin'] . '</td><td><a href="' . $row['cr'] . '">CR</a></td></tr>';
}
mysqli_close($db_link);
}
}
?>
<?php
require('inventoryControl.php');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Inventory</title>
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<div id="wraper">
<div class="add_item">
<?php
$inventario = new inventario;
echo $inventario->table();
if (isset($_POST['submit'])) {
$info = array('date' => $_POST['date'], 'stock' => $_POST['stock'], 'year' => $_POST['year'], 'make' => $_POST['make'], 'model' => $_POST['model'], 'vin' => $_POST['vin'], 'cr' => $_POST['cr']);
if(isset($info)) {
$inventario->insertar($info);
}
else {
echo 'variable not set';
}
}
?>
</div><!--end add item -->
<div class="inventory_list">
<?php
echo '<table>';
$inventario->stock_list();
echo '</table>';
?>
</div><!--end inventory_list -->
</div><!--end wraper -->
</body>
</html>
答案 0 :(得分:1)
看起来你也传递了“提交”值。
将$clean_info
输出到屏幕(运行查询之前)以进行调试。
答案 1 :(得分:0)
回显您要发送到数据库的查询文本。
insert语句列出了七列:
INSERT INTO cars
(date, stock, year, make, model, vin, cr)
因此值列表中需要有七个值,例如
VALUES ('2013-08-22','stk','''74','Dodge','Charger','12345','1500')
我怀疑将(string)$clean_info
连接到SQL文本中并没有产生有效的语句。这只是基本的调试。将该SQL语句生成一个字符串,并将该字符串输出的echo(或vardump)生成,以便您可以看到正在传递给数据库的内容。
使用mysqli界面,您可以使用参数化查询,这是一种更好的方法。 (您不对作为绑定参数提供的值使用mysqli_real_escape_string)
e.g。
$sqltext = "INSERT INTO cars(date,stock,year,make,model,vin,cr) VALUES (?,?,?,?,?,?,?)";
if ($stmt = $mysqli->prepare($sqltext)) {
$stmt->bind_param("sssssss",$date,$stock,$year,$make,$model,$vin,$cr);
$stmt->execute();