小编tim*_*fly的帖子

如何让mysql的最后一个插入ID与事务一起工作?+交易问题

两部分问题:

  1. 在我的CodeIgniter脚本中,我正在启动一个事务,然后插入一行,将insert_id()设置为php变量,使用新ID作为外键将更多行插入另一个表,然后我提交所有内容.

    所以我的问题是:如果在结束事务之前一切都没有提交,如果没有插入任何内容,mysql如何能够返回最后一个插入ID?我的脚本(几乎)完美地工作,新ID在后续查询中使用.

    (我说"差不多"因为,使用PDO mysql驱动程序,有时第一个应该返回insert_id()的插入是重复的 - 它被插入两次.任何想法为什么会这样?这与获取最后一个相关ID?如果使用mysqli或mysql驱动程序,它永远不会发生.)

  2. 我首先编写没有事务的脚本,所以我有代码检查一路上的mysql错误,例如:

    if(!$this->db->insert($table, $data)) {
        //log message here
    }
    
    Run Code Online (Sandbox Code Playgroud)

    一旦我将所有mysql代码包装在事务中,这对mysql进程有何影响?它不会导致任何明显的错误(希望与上述问题无关),但它应该被删除吗?

谢谢.

mysql pdo transactions codeigniter

22
推荐指数
1
解决办法
2万
查看次数

当无法访问服务器时,PHP的PDO忽略了MySQL的ATTR_TIMEOUT选项

我正在测试无法通过随机IP尝试连接来访问mysql服务器的场景.我将PDO的选项设置为在使用一秒后超时PDO::ATTR_TIMEOUT => 1.但是,抛出异常仍需要30秒.我猜这个超时只适用于实际的mysql连接时间,而不适用于运行mysql的服务器.

我需要更改什么PHP选项来超时连接到mysql服务器?

php mysql connection pdo

19
推荐指数
2
解决办法
9902
查看次数

从开始(计划)到完成(测试和生产),什么是良好,组织良好的Web开发工作流程?

我已经成为PHP/MySQL开发人员多年了,但不幸的是,到目前为止,它只与小型项目合作过.我现在开始一个非常复杂的新网站,我开始对工作流程感到困惑.我不确定哪个部分首先要照顾,因为它们都是相当交织在一起的.

我很想知道你们中的一些人如何管理新网站的工作流程.我是独立工作的,所以如果没有多个开发人员参与,它会更容易解释.此外,我将使用CodeIgniter框架,因此让工作流程涉及MVC模型会很棒,这实际上应该使工作流程更容易.

经过一番搜索,我发现了这个有用的图表: 工作流程图

但是,我不太清楚每个类别的内容.这是迄今为止我所理解的一般概述.当我错了或有更好的选择时,请随时纠正我.

规划

确保您有明确的项目目标:您提供什么,为谁?它对别人有什么帮助?等等

网站地图

列出将在站点上的所有页面和子页面.

线框

浏览整个站点地图,并对每个页面进行粗略草图.(你有多详细?)你可以使用铅笔和纸,或Axure或Mockingbird等程序.

工作流程图中的下一个主要类别是内容,但我不确定这涉及到什么.这是网站上的所有文字吗?数据库结构?别的什么?

艺术品

网站的实际设计/模板.不过,这真的是这个地方吗?我认为编码和功能更重要,并在此之后进行设计.

编码

这一步似乎无所不包,我认为它需要被打破.首先是数据库结构(或者是在线框之后的内容中完成的吗?)我是否为站点地图中的每个页面的所有函数制作了大纲?我是否只是创建了所有必要的控制器,并对我将要放置的功能和位置进行评论?模型是否遵循控制器概述,反之亦然?我什么时候开始填写所有控制器和型号?

需要进行持续测试以确保您的代码正常运行.

内容人口

这会包含MVC框架中的视图文件吗?换句话说,控制器和模型提供的所有数据?

最终测试

确保一切都适用于所有浏览器.在这里和那里进行调整和更改.全力以赴的众多"假设"案例.

生产

网站上线.

结论

以上是我所理解的开发复杂网站步骤的有组织流程图,但我的理解可以大大改进.应该改变什么?我可以使用所有可能的建议.谢谢.

编辑:这里有人提到"敏捷开发" - 从我到目前为止所读到的,它实际上并没有一个结构.如我错了请纠正我.正如我对这个答案所评论的那样,是否真的有可能以这种方式为复杂的网站开发,例如亚马逊或Ebay?根据我不知情的意见,工作流程应该有一个明确的计划,否则项目就没有重点.

最终编辑:虽然这个问题已经结束,但我想为稍后可能会发现这些问题的人添加一些信息.我发现以下工作流程非常有用:http://www.webassist.com/free-downloads/tutorials-and-training/web-dev-workflow.php.一般工作流程的PDF:http://assets.webassist.com/how-tos/Short-Dev-Checklist.pdf.当然也可以使用敏捷开发,但对于那些不知道从哪里开始的人来说,这可能是一个很好的起点.我可以在这里添加其他工作流程和示例.

php model-view-controller workflow

10
推荐指数
1
解决办法
8457
查看次数

如何在Sublime Text 3中启用智能HTML标记缩进?

我不记得这个功能何时停止工作,但我总是让Sublime Text正确地进行自动缩进.例如,如果我键入<div>然后按Enter,则插入符将自动在下一行上创建一个选项卡.类似地,当我关闭标签时,它们会自动取消缩进一个标签(例如,当按下alt+ .以关闭标签时).

这个功能似乎已经消失了,至少在ST3中,我找不到任何方法来取回它.有人有主意吗?

编辑:添加PHP自动缩进功能可能很有用,例如在括号之间进行缩进.

html tags indentation sublimetext2 sublimetext3

8
推荐指数
1
解决办法
6089
查看次数

如何在Docker的PHP7 Alpine图像上安装php memcached扩展?

官方php7 docker镜像有以下示例:

FROM php:7.0-fpm
RUN apt-get update && apt-get install -y libmemcached-dev \
    && pecl install memcached \
    && docker-php-ext-enable memcached
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用FROM php:7.0-fpm-alpine:

RUN apk add --update --no-cache libmemcached-dev
RUN      pecl install memcached && docker-php-ext-enable memcached
Run Code Online (Sandbox Code Playgroud)

PECL给出了这个错误:

pecl/memcached需要PHP(版本> = 5.2.0,版本<= 6.0.0,排除版本:6.0.0),安装版本为7.0.13

如何在alpine上安装memcached php扩展?

php memcached pecl docker dockerfile

8
推荐指数
2
解决办法
1万
查看次数

使用本机PHP功能比在PHP循环中做同样的事情更快吗?为什么?

这是我一直想知道的事情.当使用本机PHP函数而不是PHP循环等效时,性能总是更好吗?为什么或者为什么不?

以下两个例子来说明这个问题:

  • 假设我有一个包含1000个元素的大型数组.每个值只是一个整数用户ID.我想知道一个特定的用户标识是否在数组中,我碰巧知道它将朝向数组的末尾(因为它最近会被添加).我有两个选择:a)做一个foreach遍历整个数组的常规PHP 循环,直到找到用户ID,或者b)array_reverse()在数组上做一个并执行相同的foreach循环,直到找到id(如果它存在,它将结束这个循环更快).哪个更快?

我的直觉告诉我,第一个选项是更快,因为它做一个循环,而第二个选项是慢,因为在幕后,array_reverse()做某种类型的循环(C语言)的,因此需要两个循环的操作.

  • 如果我有一个大的多维数组,其中每个值都是[messageid,message],那么使用foreach循环来查找id的特定消息会比将messageid设置为元素的关键并且做的更慢isset(array[messageid]) && array[messageid]吗?

编辑:只是为了澄清,我知道第一个例子可以使用array_search(),因为这是一个非常简单的例子.主要的问题不是哪一个更快(因为基准可以让我很容易地知道),但为什么,如同在幕后发生的事情一样?

php performance foreach loops

7
推荐指数
1
解决办法
794
查看次数

如何在ansible命令行中添加可选变量并检查它们在playbook中的存在?

我想只在命令行中给出一个标志时才运行一个特定的任务.例如,我想使用以下命令运行ansible-playbook命令:--extra-vars "composer-install=true".我会以某种方式需要一个检查composer-install变量是否已设置的任务,如果设置并且等于true,则运行运行的给定任务composer install.我不太确定如何做最后一部分.

ansible ansible-playbook

6
推荐指数
1
解决办法
7899
查看次数

如何查看有多少提交本地分支在git中另一个本地分支的前面/后面?

如果我正在开发一个功能分支,我想知道这个分支在master分支的前面或后面有多少次提交.我似乎无法找到执行此操作的命令.

git

6
推荐指数
2
解决办法
4137
查看次数

使用React开发Firefox扩展时,控制台记录某些对象不起作用

控制台记录某些对象,如对象this.refswindow导致TypeError: cyclic object value终端中的错误.

我的代码非常基本:我正在尝试更改网页上的html(在其中放置反应组件).

Main.js:

var pageMod = require("sdk/page-mod");
var self = require("sdk/self");
var { MatchPattern } = require("sdk/util/match-pattern");

// Create a page mod
// It will run a script whenever a ".org" URL is loaded
// The script replaces the page contents with a message
pageMod.PageMod({
  include: /.*wikipedia.org\/wiki\/.*/,
  contentScriptFile: [
        self.data.url("react-with-addons.js"),
        self.data.url("testing.js"),
    ],
    contentScriptWhen: "ready",
    // contentStyleFile: self.data.url("style.css"),
});
Run Code Online (Sandbox Code Playgroud)

testing.js:

var AppContainer = React.createClass({displayName: "AppContainer",

   componentDidMount: function() {
      console.log(this.refs.myRef);
      console.log(window);
   },

   render: …
Run Code Online (Sandbox Code Playgroud)

firefox-addon firefox-addon-sdk reactjs

6
推荐指数
0
解决办法
1万
查看次数

如何跳转到PHPstorm项目导航侧边栏中的文件夹?

我想通过键入位置在项目导航中找到一个文件夹,就像使用"导航到文件"快捷方式时一样.我怎么做?我目前必须滚动并单击每个文件夹才能到达我想要的位置.

navigation phpstorm

5
推荐指数
1
解决办法
2315
查看次数