PHP mysqli插入不起作用,但没有给出任何错误
Posted
技术标签:
【中文标题】PHP mysqli插入不起作用,但没有给出任何错误【英文标题】:PHP mysqli Insert not working, but not giving any errors 【发布时间】:2011-02-10 06:40:40 【问题描述】:正如标题所说,我试图做一个简单的插入,但实际上没有任何东西插入到表中。我尝试打印出错误,但没有报告任何内容。
我的 users 表的字段比这 4 个多得多,但它们都应该是默认的。
$query = 'INSERT INTO users (username, password, level, name) VALUES (?, ?, ?, ?)';
if($stmt = $db -> prepare($query))
$stmt -> bind_param('ssis', $username, $password, $newlevel, $realname);
$stmt -> execute();
$stmt -> close();
echo 'Any Errors: '.$db->error.php_EOL;
没有给出错误,但是当我查看 phpmyadmin 中的表格时,没有添加新行。我确定类型是正确的(字符串和整数)。这里真的有什么问题吗,还是与我忽略其他列的事实有关。我在用户表中有大约 8 列。
【问题讨论】:
您是否检查过以确保您确实已连接? “SELECT”有效吗? 另外,$username、$password、$newlevel 和 $realname 的值是多少?它们都设置正确了吗? 【参考方案1】:如果您关闭了自动提交,您必须在执行查询后显式调用提交方法。
$stmt->execute();
$db->commit();
$stmt->close();
【讨论】:
【参考方案2】:您必须在流程的每个阶段检查错误:连接时、准备语句时、绑定时、执行时以及关闭时。在您的代码中,假设 $db
句柄已正确创建,错误检查发生在 ->close()
调用之后,应该会成功,因此此时不会有任何错误。
这样的事情会显示事情发生的地方:
$query = 'INSERT INTO users (username, password, level, name) VALUES (?, ?, ?, ?)';
$stmt = $db->prepare($query);
echo 'prepare error: ', $db->error, PHP_EOL;
$stmt->execute();
echo 'execute error: ', $db->error
etc....
【讨论】:
【参考方案3】:检查是否正在打印字符串“任何错误”。如果不是,那么语句:
if ($stmt = $db->prepare($query))
返回 false。您应该将echo 'Any Errors: '.$db->error.PHP_EOL;
移到条件块之外。
【讨论】:
【参考方案4】:你是否初始化了 $username, $password, $newlevel, $realname 在 $stmt -> 执行();陈述。否则你必须初始化并尝试
【讨论】:
PHP 网站上的文档不同意您的观点。 php.net/manual/en/mysqli-stmt.bind-param.php【参考方案5】:$query = 'INSERT INTO users (username, password, level, name) VALUES (?, ?, ?, ?)';
if($stmt = $db -> prepare($query))
$stmt -> bind_param('ssis', $username, $password, $newlevel, $realname);
$username='testname';$password='testpwd';$level=5;$realname='testrealname';
$stmt -> execute(); echo "inserted SuccessFully"; $stmt -> close();
else printf("Prepared Statement Error: %s\n", $mysqli->error);
试试这个代码。如果查询成功执行,则显示“插入成功”,否则显示错误。
【讨论】:
以上是关于PHP mysqli插入不起作用,但没有给出任何错误的主要内容,如果未能解决你的问题,请参考以下文章