MySQL存在则更新方法对比

MySQL存在则更新方法一般有以下几种

  1. SELECT + UPDATE
  2. REPLACE INTO
  3. INSERT INTO … ON DUPLICATE KEY UPDATE

SELECT + UPDATE 是最传统的一个,要对数据库进行两次操作。
REPLACE INTO 和 INSERT INTO ON DUPLICATE KEY UPDATE都是一次操作,表面看起来功能差不多,REPLACE INTO 还优胜些,因为要短一些。
但是两者还是有点区别的:
REPLACE INTO 等于 DELETE + INSERT INTO,如果表的主键是一个自增ID,那问题就来了,REPLACE INTO 会导致主键的值越来越大,如果溢出,将会导致数据无法插入。
而INSERT INTO ON DUPLICATE KEY UPDATE的实质却是 if(EXISTS) UPDATE else INSERT INTO 的操作。
两者的效率都不怎么样,道理很简单,因为一个人干了两个人的活嘛。

关于JS跨域那点事儿

网上不少方案,包括:

  1. jsonp(最常用)
  2. iframe(限于同根域)
  3. swf辅助
  4. 代理
  5. script标签

在这里特别尝试了一下最后一种方案。
分别配置了www.a.com和www.b.com
www.a.com中index.html代码:

// javascript 部分
<script type="text/javascript">
$(function () {
	var script = document.createElement("script");
	script.src = "http://www.b.com/script.php";
	script.onload = function () {
		alert(remote.test);
	}
	$("head")[0].appendChild(script);
});
</script>

www.b.com中script.php代码:

<?php
echo "var remote={test:'hello'};";
?>

得到的结果是“hello”。

PHP 5.4 beta1 发布 引入traits新语法

PHP 5.4 beta1 已于2011-09-29发布。

PHP 的 5.4x 分支新添加了许多新的特性,如 mixin 语法“traits”、直接使用数组下标访问函数返回值 explode(“,”, “a,b,c,d,e”)[3] 、方便调试用的内置 Webserver SAPI 等。其中一些特性(如 traits)将改变我们的开发方式。

国内 PHP 内核大牛 laruence 也加入了 PHP 开发组,并参与了 PHP 5.4 的改进。

MySQL主从同步怪异问题之mysql_select_db必须

MySQL主从同步对大家而言,已经是熟悉到不能再熟悉了,在这就不解释太多。
环境:
主服务器M
从服务器S
数据库A中数据表a

问题详细:
通过PHP脚本对M服务器中数据库A中的数据表a进行数据CURD操作,S服务器数据没有同步更新。

$connection = mysql_connect('A_SERVER', 'A_USER', 'A_PWD');
mysql_query("INSERT INTO `A`.`a` (`a`,`b`) VALUES ('1', '2')");

通过phpMyAdmin进行同样的操作,S服务器的数据同步更新了。

INSERT INTO `A`.`a` (`a`,`b`) VALUES ('1', '2');

问题分析
两个操作对M服务器的数据都正常,这个无用质疑,但是为什么S服务器同步就会有差别呢?其实有一个区别,PHP脚本里没有mysql_select_db操作,难道真的是因为这个原因?是的,正是因为这个原因。
很多人认为在表名前面加上数据库名就可以省略mysql_select_db这步操作了,特别是在跨库操作的时候,结果导致了这样的结果。