我尝试从一个形式(通过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);
?>
我瓦特/ PHP 5.4.16,阿帕奇2.4.4和Windows XP上的MySQL 5.6.11上XAMPP 1.8.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 /如果你有dtStamp
是DEFAULT = CURRENT_TIMESTAMP
你可能不需要插入,要么像:
$query = "INSERT INTO silver.finance (Amount)
VALUES (1);";
你写你自己的,“它不显示任何错误”。 有一些事情你需要记住(并在您检查表),用这样一个广泛的分析。
首先,PHP不显示错误始终。 无论它是否显示错误取决于你所使用的错误配置。 当你没有在你的问题表明这是很难说,如果这是一个问题,或者没有,但是,如果您遇到意想不到的事情(像你这样做),你首先应该检查哪里如何报告错误。
在解释整个PHP错误配置将太多这里的答案,一个很好的资源(已经记录了所有的细节,手动旁),我们有这样的一个这里的#1网站:
然后,你需要澄清,如果在所有地方,并给出了mysqli的错误。 让我们回顾一下每一个步骤里的东西可以错转出。
连接:
$mysqli = new mysqli($host, $user, $pass, 'finance');
实例化的mysqli与错误的凭证并在PHP中给出错误。 但是, mysqli
对象将被实例化反正 。 这意味着变量$mysqli
将永远类型的对象mysqli
-不管是否连接成功与否。
正如在PHP中的每个对象始终是松散的true
,就像一个检查
if (!$mysqli) {
是不够的告诉你,如果有一个连接问题 - 所以你做,你做什么错在这里。 $mysqli
总是truthy所以如果从句体很好地从未进入。 相反,你需要检查,如果到服务器的连接可能已被寻找的mysqli连接错误建立。 您可以通过检查它的错误号这样做。 它是0
(整数零),如果有无,和一个非零整数(truthy)如果有一个误差(因为它不是作为错误编号:
if ($mysqli->connect_errno) {
此属性在PHP手册中记录为好,看到mysqli::$connect_errno
。 不同的错误数字我不能在所有的细节解释,但你可以找到他们这里的mysqli文档中记载: C.3。 服务器错误代码和消息 。
作为另一个备选方案,以这一点 - 这也适用于检查前一个连接仍然有效 - 是运行测试查询:
if (NULL === $mysqli->query("SELECT 1;")) {
一个简单的查询等SELECT 1;
返回NULL
如果您无法连接到数据库服务器。 这是用于连接到服务器时,可以转出很多问题:你可能是使用了错误的用户名和密码((HY000 / 1045)“拒绝访问”),一个错误的服务器((HY000 / 2002)“连接失败” ),甚至使用错误的数据库((HY000 / 1049) “未知数据库”)。
运行这样的测试查询是很容易做到并迅速告诉你,如果连接顺利。 在成功连接的情况下,为回报类型的对象mysqli_result
它没有资格作为=== NULL
,因此更新,如果子句涵盖了所有这些成功和失败的情况很好。
这也显示了另一个伟大的原理:大部分方法返回的东西,你可以检查发现,如果出事了。
执行插入查询:
其次检查错误是在执行INSERT ...
SQL查询:
// execute query
$mysqli->query($query);
至于你这个代码显示,你没有做任何的错误,在这里所有的检查。 再次,这是错误的。 相反,如您的期望不匹配,你需要的,如果将工作或没有在这里验证。 再次证明方法返回一个值,在的情况下, INSERT ...
SQL查询,这是一个布尔查询是否没有工作:
// 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
连接对象,这里mysqli::$sqlstate
, mysqli::$errno
和mysqli::$error
。
因此,更好地仔细检查捉迷藏的结论是“没有错误给出”之前发生了什么错误。 首先,检查是否所有的错误已自动获得(和地方,如屏幕或到一个日志文件?)。 或者,如果连这是由你来检查错误条件,因为失败始终是一个选择,而不是一切,“不工作”就可以,甚至当你使用它看作是PHP扩展或PHP语言故障。