我创建了一个插入与显示数据不同的数据的函数。然后我收到一个错误。未知栏' $ prod_name'在'字段列表'。请告诉我任何正确的建议,因为我是pdo的初学者。感谢
这是我的代码:
<?php
function run_db($sqlcom){
$con = new PDO('mysql:host=localhost; dbname=product', 'root', '');
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $con->prepare($sqlcom);
$stmt->execute();
return $stmt;
}
function insertData($sqlcom)
{
$con = new PDO('mysql:host=localhost; dbname=product', 'root', '');
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $con->prepare($sqlcom);
$stmt->execute();
return $stmt;
}
if(isset($_POST['btn-insert'])){
$prodname = $_POST['prod_name'];
$prodsupp = $_POST['prod_supplier'];
$prodprice = $_POST['prod_price'];
try{
$stmt = insertData('INSERT INTO tbl_product(prod_name, prod_supplier, prod_price)VALUES($prodname, $prodsupp, $prodprice)');
}catch(Exception $e){
die('error : ' . $e->getMessage());
}
}
?>
<html>
<head><title></title></head>
<body>
<table cellpadding="4" cellspacing="2" border='1'>
<tr>
<th>Product ID</th>
<th>Product NAME</th>
<th>Product SUPPLIER</th>
<th>Product PRICE</th>
</tr>
<?php $stmt = run_db('SELECT * FROM tbl_product'); while($product = $stmt->fetch(PDO::FETCH_OBJ)) { ?>
<tr>
<td><?php echo $product->prod_id; ?></td>
<td><?php echo $product->prod_name; ?></td>
<td><?php echo $product->prod_supplier; ?></td>
<td><?php echo $product->prod_price; ?></td>
</tr>
<?php } ?>
</table>
<br>
<br>
<form action="" method="post">
<table cellspacing="2" cellpadding="2" border="1">
<tr>
<td>Product name:</td>
<td><input type="text" name="prod_name"></td>
</tr>
<tr>
<td>Product supplier:</td>
<td><input type="text" name="prod_supplier"></td>
</tr>
<tr>
<td>Product Price:</td>
<td><input type="text" name="prod_price"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="btn-insert" value="INSERT"></td>
</tr>
</table>
</form>
</body>
</html>
答案 0 :(得分:2)
SQL中的字符串文字用单引号('
s)表示。如果没有它们,则将裸字解释为对象(在本例中为列)名称,并且当此类对象不存在时查询将失败。
要解决此问题,您可以使用引号括起插入的值:
$stmt = insertData("INSERT INTO tbl_product(prod_name, prod_supplier, prod_price)VALUES('$prodname', '$prodsupp', '$prodprice')");
强制性评论:
在SQL中使用字符串替换是一种不好的做法,使您的代码容易受到SQL注入攻击。您应该考虑使用prepared statements代替。