我正在尝试编写订单流程。我在一个数据库(dbphesemaas)中有3个不同的表(订单,产品,用户)。
到目前为止我尝试过的东西不起作用:
<?php
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('dbphesemaas');
$username=$_POST["username"];
$area=$_POST["area"];
$product=$_POST["product"];
$address=$_POST["address"];
$dol_quantity=$_POST["quantity"];
$query="INSERT INTO orders (id, product_id, address, quantity) VALUES ('$id', '$id2', '$address', '$dol_quantity')";
mysql_close();
?>
有人可以使这段代码工作,id是来自用户的外键,而product_id是产品的外键吗?
答案 0 :(得分:3)
您只需连接并执行查询。
嗯,是的,没有 - 你怎么确定一切都有效?
让我们从错误处理开始。
<?php
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('dbphesemaas');
?>
连接是否正常?数据库是否已成功选择?
您可以使用if
模块检查它是否有效。
<?php
// IF $link = mysql_connect('localhost', 'root', '') did not work (note the ! in front of it)
if(!$link = mysql_connect('localhost', 'root', '')){
die('Could not connect to localhost'); // The message displayed. die() will prevent the rest of the script from executing.
}
// IF database "dbphesemaas" did not get selected succesfully (note the ! in front of it)
if(!mysql_select_db('dbphesemaas', $link)){
die('Could not select the database "dbphesemaas"'); // The message displayed. die() will prevent the rest of the script from executing.
}
?>
现在我们有了连接。如果出现问题,脚本将停止执行并抛出自定义错误。
$username=$_POST["username"];
$area=$_POST["area"];
$product=$_POST["product"];
$address=$_POST["address"];
$dol_quantity=$_POST["quantity"];
现在是我的问题,为什么?在查询中使用它们没有任何问题。你只做变量的唯一原因是,如果旧变量很长(因此拼写错误的机会更大)和/或你认为代码太乱了。由于此代码中没有问题可以使用$ _POST变量,因此我们将划分这段代码。
$query="INSERT INTO orders (id, product_id, address, quantity) VALUES ('$id', '$id2', '$address', '$dol_quantity')";
这里有一些问题:
$id
,$id2
等)。在错误的情况下,它会在数据库中插入$id
而不是实际值。mysql_real_escape_string
:http://php.net/manual/en/function.mysql-real-escape-string.php 让我们解决这些问题:
$query="
INSERT INTO
orders
(
id,
product_id,
address,
quantity
)
VALUES
(
'". mysql_real_escape_string($_POST['id']) ."',
'". mysql_real_escape_string($_POST['id2']) ."',
'". mysql_real_escape_string($_POST['adress']) ."',
'". mysql_real_escape_string($_POST['quantity']) ."'
)
";
if(mysql_query($query)){
echo 'Succesfully executed the query.';
}
else
{
echo 'Query not executed - MySQL error. <br>';
echo '<pre>'. mysql_error() .'</pre>';
}
使用'". (random php code) ."'
允许在字符串中执行php代码。例如:
$variable = 'This is text '. strtoupper('this is capitalized since strtoupper makes this capital. note that this is inside the string.') .' and this is once again lowercase.';
我编写这些代码的方式对未来很有用。每次打开/添加新括号({
)时都保留使用标签。
更多信息 - 从PHP 5.5开始,默认的mysql_ *函数将被弃用 - 将来使用MySQLi,它是改进版本。信息:http://www.php.net/manual/en/book.mysqli.php
一个mysql_query
只能执行一个查询。你可以这样做:
$queries = array();
$errors = array();
$queries[] = 'INSERT INTO ... '; // using $variable[] will add another entry to the $variable array.
$queries[] = 'INSERT INTO ... ';
$queries[] = 'UPDATE bla SET ...';
foreach($queries as $query){
// Foreach will seperate the entries in an array
// IF mysql query failed
if(!mysql_query($query)){
$errors[] = mysql_error(); // We'll add the errors to an array aswell.
}
}
// Check if there are entries in the $failures array.
if(count($errors) > 0){
echo 'We had some MySQL errors.';
echo '<ul>';
foreach($errors as $failure){
echo '<li>'. $failure .'</li>';
}
echo '</ul>';
}
else
{
echo 'No errors - MySQL queries executed succesfully.';
}
希望这可以帮助你。