我试图将表单中的数据(通过POST)插入到MySQL数据库中,它不会显示任何错误,但是当我在phpMyAdmin中检查它时它不会显示。
<?php
$amount = $_POST["amount"];
$unit = $_POST["unit"];
$date = date('Y-m-d H:i:s');
$host = "localhost";
$user = "root";
$pass = "";
$db = "finance";
$table = "silver";
$mysqli = new mysqli($host, $user, $pass, 'finance');
if(!$mysqli)
{
echo "<div class=\"error\">";
echo "No connection can be established";
echo "</div>";
die();
}
if ($unit = "gram") $amount = $amount * 28.3495231;
// create query
$query = "INSERT INTO 'silver'.'finance' (
'Transaction_Num',
'dtStamp',
'Amount'
)
VALUES (
NULL, \'2013-07-03 06:18:16\', \'1\'
);";
// execute query
$mysqli->query($query);
?>
我在XAMPP 1.8.2 w / PHP 5.4.16,Apache 2.4.4和 Windows XP上的MySQL 5.6.11。
答案 0 :(得分:2)
不要在表和字段名称上使用单引号。这应该是反击。
试试这个:
$query = "INSERT INTO `silver`.`finance` (
`Transaction_Num`,
`dtStamp`,
`Amount`
)
VALUES (
NULL, '2013-07-03 06:18:16', '1'
);";
OR / AND如果Transaction_Num
是AUTO_INCREMENT
,您可能不需要像以下那样插入:
$query = "INSERT INTO silver.finance (dtStamp,Amount)
VALUES ( '2013-07-03 06:18:16', 1);";
OR / AND如果dtStamp
为DEFAULT = CURRENT_TIMESTAMP
,则可能不需要插入,如:
$query = "INSERT INTO silver.finance (Amount)
VALUES (1);";
答案 1 :(得分:0)
你自己写的,“它没有显示任何错误”。通过如此广泛的分析,您需要记住一些事项(并列入您的清单)。
首先,PHP不会始终显示错误。它是否显示错误取决于您使用的错误配置。正如你没有在你的问题中显示的那样,很难说这是否是一个问题,但是,如果你遇到意想不到的事情(就像你一样),你首先应该检查报告错误的方式和位置。
解释整个PHP error configuration对于这里的答案来说太过分了,一个很好的资源(在已经详细记录了所有内容的手册旁边)我们在Stackoverflow网站上有这个:
然后你需要弄清楚是否存在Mysqli错误。让我们回顾一下事情可能出错的每一步。
$mysqli = new mysqli($host, $user, $pass, 'finance');
使用错误的凭据实例化Mysqli确实会在PHP中出错。但是,mysqli
对象将被实例化无论如何。这意味着变量$mysqli
总是 mysqli
类型的对象 - 无论连接是否成功。
由于PHP中的每个对象总是 松散地true
,所以像
if (!$mysqli) {
不足以告诉您是否存在连接问题 - 所以当您这样做时,您在这里做错了。 $mysqli
始终是真实的,所以永远不会输入if子句。相反,您需要检查是否可以通过查找 mysqli连接错误来建立与服务器的连接。你可以通过检查它的错误号来做到这一点。如果没有则为0
(整数零),如果有错误则为非零整数(真值)(因为它比错误号:
if ($mysqli->connect_errno) {
此属性也在PHP手册中记录,请参阅mysqli::$connect_errno
。我无法详细解释不同的错误编号,但您可以在Mysqli文档中找到它们:C.3. Server Error Codes and Messages。
作为另一种选择 - 它也可用于检查先前的连接是否仍处于活动状态 - 是运行测试查询:
if (NULL === $mysqli->query("SELECT 1;")) {
如果您无法连接到数据库服务器,SELECT 1;
这样的简单查询会返回NULL
。这是针对连接到服务器时可能出现的许多问题:您可能使用了错误的用户名或密码((HY000 / 1045)“拒绝访问”),服务器错误((HY000 / 2002)“连接失败” )甚至使用错误的数据库((HY000 / 1049)“未知数据库”)。
运行此类测试查询很容易,并且可以快速告诉您连接是否顺利。如果您成功连接,则返回mysqli_result
类型的对象,该对象不符合=== NULL
的条件,因此更新if-clause将很好地涵盖所有这些失败和成功方案。
它还向您展示了另一个伟大的原则:大多数方法返回一些您可以检查的内容,以发现是否出现问题。
检查错误的下一个位置是执行INSERT ...
SQL查询:
// execute query
$mysqli->query($query);
正如您的此代码所示,您根本没有在此处执行任何错误检查。再次,这是错误的。相反,由于您的期望不匹配,您需要在此处验证插入是否有效。同样,该方法返回一个值,在INSERT ...
SQL查询的情况下,无论查询是否有效,这都是 boolean :
// execute query
$result = $mysqli->query($query);
if (!$result) {
throw new Exception(
sprintf(
'query "%s" failed: (%s/%d): %s', $query,
$mysqli->sqlstate, $mysqli->errno, $mysqli->error
)
);
}
正如此示例所示,再次添加了对返回值的正确检查,如果出现问题,则通过读取$mysqli
连接对象的相应属性(此处为{{3)来给出错误消息。 },mysqli::$sqlstate
和mysqli::$errno
。
在跑到“没有给出错误”的结论之前,最好仔细检查出了什么问题。首先检查是否必须自动给出错误(例如,在屏幕上还是在日志文件中?)。或者如果不是甚至由你来检查错误条件,因为失败总是一个选项,并且即使你使用它,也不会将“不起作用”的所有内容视为PHP扩展或PHP语言的故障。