我一定是在做傻事。我已经对此问题进行了 3 天的故障排除,但没有成功。
这是发送到 mysql_query() 的 PHP 字符串:
insert into post_replies (postID, fromID, toID, status) values ($id, $userID, $toID, ".g_unread.")
在你说“啊哈,SQL 一定有错误”之前,请注意以下两点:
我尝试的另一件事是从文本中返回加载查询,然后将其发送到 mysql_query() - 但会产生相同的奇怪行为 - 它返回成功 (1),但没有新的实际插入行。
我已经把这个展示给另一个程序员,他提示我的 PHP 编码风格。他说 INT 应该包装成字符串,我应该在它们周围使用花括号(例如'{$id}')。然而,当然这并没有解决任何问题,行为是完全一样的。如果字符串生成有问题,那么问题将出现在发送到 mysql_query() 之前导出到文本文件的查询中。他还提示说我使用的是过时的 mysql 函数(我应该使用 mysqli 函数)。但是,这并不能解释为什么我通过 mysql_query() 发送的数百个其他查询工作正常,包括这一查询下面几行的查询。它没有解释为什么如果我将导出到文本文件的文本直接粘贴到 mysql_query() 中,查询工作正常。
非常感谢。我完全迷失在这里。
更新 #1:根据要求,这里是语句周围的代码:
$q = "insert into post_replies (postID, fromID, toID, status) values ($id, $userID, $toID, ".g_unread.")";
$result = mysql_query($q);
if ($result == true) {
z($q);
} else {
z('failure');
}
z() 是我用来轻松导出到文本文件的函数。顺便说一句,查询总是发送到 z(),永远不会发送“失败”。
这是发送到文本文件的示例:
insert into post_replies (postID, fromID, toID, status) values (2039, 8, 1, 1)
请记住,如果我将该文本粘贴到 phpMyAdmin 或上面的 mysql_query() 函数中,则会插入该行。
更新 #2:由于一些人的担忧,我更新了这部分代码以使用 mysql[i]
$mysqli = new mysqli(g_db_server, g_db_user, g_db_pass, g_db);
$result = $mysqli->query($q);
我现在建立一个单独的连接,只为这个单一的查询。但是,行为是完全相同的。它返回 true,但没有创建新闻行。但是,如果我将 $q 导出到一个文本文件,然后将该文本粘贴到上面的 $mysqli->query() 中,它工作正常并且新行按预期创建。
由于每个人似乎都放弃了,我现在正在努力将问题隔离到单个 MySQL 表/PHP 文件,任何人都可以下载并自己尝试。
更新 #3:已解决!有点。好像是周围代码的问题,导致插入后行被删除。但是,这仍然不能解释为什么 mysql_insert_id() 返回 0。也许 mysql_insert_id() 在复合键上中断。无论如何,我不在乎 - 因为它是固定的。我会将支票交给@user1231958,因为他的回答最接近。非常感谢大家的帮助,很抱歉被 mysql_insert_id() 欺骗
最佳答案
在指定表格和行时尽量使用重音符,
$q = "INSERT INTO `post_replies` (`postID`, `fromID`, `toID`, `status`) VALUES ('$id', '$userID', '$toID', '".g_unread."')";
$result = mysql_query($q);
if ($result == true) {
z($q);
} else {
z('failure');
}
告诉我是否可行。
关于php - INSERT 语句之谜——mysql_query 返回 true,但数据库中没有新行出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11680706/
我注意到类定义,如果我打开classMyClass,并在不覆盖的情况下添加一些东西我仍然得到了之前定义的原始方法。添加的新语句扩充了现有语句。但是对于方法定义,我仍然想要与类定义相同的行为,但是当我打开defmy_method时似乎,def中的现有语句和end被覆盖了,我需要重写一遍。那么有什么方法可以使方法定义的行为与定义相同,类似于super,但不一定是子类? 最佳答案 我想您正在寻找alias_method:classAalias_method:old_func,:funcdeffuncold_func#similartoca
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
在添加一些空格以使代码更具可读性时(与上面的代码对齐),我遇到了这个:classCdefx42endendm=C.new现在这将给出“错误数量的参数”:m.x*m.x这将给出“语法错误,意外的tSTAR,期待$end”:2/m.x*m.x这里的解析器到底发生了什么?我使用Ruby1.9.2和2.1.5进行了测试。 最佳答案 *用于运算符(42*42)和参数解包(myfun*[42,42])。当你这样做时:m.x*m.x2/m.x*m.xRuby将此解释为参数解包,而不是*运算符(即乘法)。如果您不熟悉它,参数解包(有时也称为“spl
我想从then子句中访问case语句表达式,即food="cheese"casefoodwhen"dip"then"carrotsticks"when"cheese"then"#{expr}crackers"else"mayo"end在这种情况下,expr是食物的当前值(value)。在这种情况下,我知道,我可以简单地访问变量food,但是在某些情况下,该值可能无法再访问(array.shift等)。除了将expr移出到局部变量然后访问它之外,是否有直接访问caseexpr值的方法?罗亚附注我知道这个具体示例很简单,只是一个示例场景。 最佳答案
给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in
如何在Ruby的if语句中检查bash命令的返回值(true/false)。我想要这样的东西,if("/usr/bin/fswscell>/dev/null2>&1")has_afs="true"elsehas_afs="false"end它会提示以下错误含义,它总是返回true。(irb):5:warning:stringliteralincondition正确的语法是什么?更新:/usr/bin/fswscell寻找afs安装和运行状态。它会抛出这样的字符串,Thisworkstationbelongstocell如果afs没有运行,命令以状态1退出 最
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
我最近与一位同事讨论了以下Ruby语法:value=ifa==0"foo"elsifa>42"bar"else"fizz"end我个人并没有看到太多这种逻辑,但我的同事指出,这实际上是一种相当普遍的Rubyism。我试着用谷歌搜索这个主题,但没有找到任何文章、页面或SO问题来讨论它,这让我相信这可能是一种非常实际的技术。然而,另一位同事发现语法令人困惑,而是将上面的逻辑写成这样:ifa==0value="foo"elsifa>42value="bar"elsevalue="fizz"end缺点是value=的重复声明和隐式elsenil的丢失,如果我们想使用它的话。这也感觉它与Ruby
我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi
这段代码没有像我预期的那样执行:casewhen->{false}then"why?"else"ThisiswhatIexpect"end#=>"why?"这也不是casewhen->(x){false}then"why?"else"ThisiswhatIexpect"end#=>"why?"第一个then子句在两种情况下都被执行,这意味着我提供给when子句的lambda没有被调用。我知道无论when子句的主题是什么,都应该调用大小写相等运算符===。我想知道当没有为case提供参数时,===的另一边会发生什么。我在想它可能是nil,但它不可能是:->{false}===nil#=>