PHP mysqli语句执行()不起作用
Posted
技术标签:
【中文标题】PHP mysqli语句执行()不起作用【英文标题】:PHP mysqli statement execute() not working 【发布时间】:2017-09-20 01:35:26 【问题描述】:我没有在 ***.com 上找到同样的东西,所以我发布了我的问题,希望有人知道我的代码或我正在使用的东西有什么问题。
在我开始之前:在我的生产性网站空间中,相同的代码可以工作,问题出在我本地开发服务器的 xampp 安装中...... sigh
我有一个小网络应用程序供我和家人用来记录家里的工作(例如清空垃圾箱),这样我们就可以根据孩子们自己完成的工作量来分配钱(给他们不做作业就得到零用钱)
在我的数据库表中插入一行的代码是:
function AddGarbEntry($DBConnection, $DBPrefix, $UserID, $GarbID)
$stmt = $DBConnection->prepare("INSERT INTO t_".$DBPrefix."_entries (idUsers,idGarbType) VALUES (?,?)");
$stmt->bind_param("ii", $UserID, $GarbID);
$stmt->execute();
$stmt->close();
我调用这个函数的脚本部分是:
$con = new mysqli($_SESSION["DBHost"], $_SESSION["DBUsername"], $_SESSION["DBPassword"], $_SESSION["Database"]);
AddGarbEntry($con, $DBPrefix, $_POST["user"], $_POST["garbagetype"]);
$con->close();
我已经检查了 Session-Variables(它们都填充了正确的值)和 POST-Values(它们也填充了正确的值)。
在我的MySQL-Log中可以找到以下几行:
170423 11:54:38 66 Connect rldmla_1@localhost as anonymous on rldmla_db1
66 Prepare INSERT INTO t_garb_entries (idUsers,idGarbType) VALUES (? , ?)
66 Close stmt
66 Quit
所以,我可以看到,prepare 正在工作,但没有迹象表明我的测试服务器运行了 execute()-Command。 php、apache 和 mysql 的错误日志没有关于此的条目。
奇怪的是,如果我使用我网站的特定功能来更新已经存在的行(也是准备好的语句,但更新语句),我的插入代码可以正常工作大约两次,之后它会停止工作直到我再次更新我的表格。
我试过xampp的实际版本(7.1.x)和旧版本(7.0.15),但问题是一样的。 Xampp 在运行 x64 的 Windows Server 2012 机器上作为 x86 版本运行。我只安装了 Apache、PHP 和 MySQL 模块。
我没有任何线索,我做错了什么。任何帮助表示赞赏。
你好,罗尼
【问题讨论】:
$stmt->error;
是否返回任何内容?而且您可能不应该在会话中存储数据库信息,尤其是密码不应该在那里。改用带有定义的文件或从中解析的配置。
可以检查最后一条语句是否有错误。在execute
之后立即使用此printf (" Error:% s. \ N ", $ stmt-> error);
。
我试过了,但是 stmt->error 是空的 :(
【参考方案1】:
Urks....现在我知道了:
我将我的 Xampp-Installation 更改为基于 linux 的虚拟机,在那里我安装了 Apache、PHP、MySQL 和 phpMyAdmin。之后,缺少的执行行位于 MySql-Logfile 中。
所以,这里无事可做。
感谢@all 支持我:)
你好,罗尼
【讨论】:
以上是关于PHP mysqli语句执行()不起作用的主要内容,如果未能解决你的问题,请参考以下文章