【发布时间】:2015-10-13 08:57:46
【问题描述】:
我的php代码:
for($i=0;$i<num_rows($sql);$i++)
if(isset($_POST['knight'.$i]))
{
$data=
[
$pm_id=$_POST['pm_id'.$i],
$knight_id=$_POST['knight'.$i],
];
mysql_query("update `project_waiting` set `chosen`=(b'1') where `pm_id`='$pm_id' and `knight_id`='$knight_id';");
mysql_query("insert into `project_working`(`pm_id`,`knight_id`) values('$pm_id','$knight_id');");
}
当我使用 echo 而不是 mysql_query 时,它会返回:
update `project_waiting` set `chosen`=(b'1') where `pm_id`='P1_1' and `knight_id`='K1';
insert into `project_working`(`pm_id`,`knight_id`) values('P1_1','K1');
update `project_waiting` set `chosen`=(b'1') where `pm_id`='P1_1' and `knight_id`='K2';
insert into `project_working`(`pm_id`,`knight_id`) values('P1_1','K2');
update `project_waiting` set `chosen`=(b'1') where `pm_id`='P1_1' and `knight_id`='K3';
insert into `project_working`(`pm_id`,`knight_id`) values('P1_1','K3');
update `project_waiting` set `chosen`=(b'1') where `pm_id`='P1_1' and `knight_id`='K4';
insert into `project_working`(`pm_id`,`knight_id`) values('P1_1','K4');
update `project_waiting` set `chosen`=(b'1') where `pm_id`='P1_2' and `knight_id`='K1';
insert into `project_working`(`pm_id`,`knight_id`) values('P1_2','K1');
update `project_waiting` set `chosen`=(b'1') where `pm_id`='P1_2' and `knight_id`='K4';
insert into `project_working`(`pm_id`,`knight_id`) values('P1_2','K4');
update `project_waiting` set `chosen`=(b'1') where `pm_id`='P1_3' and `knight_id`='K2';
insert into `project_working`(`pm_id`,`knight_id`) values('P1_3','K2');
它在我的 phpmyadmin 上完美运行,但是当我将 echo 更改为 mysql_query 时,它只影响 5 行(两个表)
P1_1-K1
P1_1-K4
P1_1-K3
P1_1-K2
P1_2-K1
我的完整数据库
-- phpMyAdmin SQL Dump
-- 版本 4.3.11
-- http://www.phpmyadmin.net
-- 主机:127.0.0.1 -- 生成时间:2015 年 7 月 23 日下午 12:16 -- 服务器版本:5.6.24 -- PHP版本:5.6.8
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00";
--
-- 数据库:knightit
如果不存在则创建数据库knightit 默认字符集 utf8 COLLATE utf8_unicode_ci;
使用knightit;
--
-- 表admin的表结构
如果存在则删除表admin;
如果不存在则创建表 admin (
id varchar(16) 整理 utf8_unicode_ci 非空,
password binary(60) 非空,
level int(2) 非空
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- 表employers的表结构
如果存在则删除表 employers;
如果不存在则创建表 employers (
emp_id varchar(16) 整理 utf8_unicode_ci NOT NULL DEFAULT '',
password longtext COLLATE utf8_unicode_ci NOT NULL,
email varchar(32) 整理 utf8_unicode_ci 非空,
emp_name 文本整理 utf8_unicode_ci,
coins bigint(20) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- 表knights的表结构
如果存在则删除表knights;
如果不存在则创建表knights (
knight_id varchar(16) 整理 utf8_unicode_ci 非空,
password longtext COLLATE utf8_unicode_ci NOT NULL,
knight_name 文本整理 utf8_unicode_ci,
email varchar(32) 整理 utf8_unicode_ci 非空,
s_id varchar(16) 整理 utf8_unicode_ci DEFAULT NULL,
points int(11) 默认“0”,
coins int(32) NOT NULL DEFAULT '0',
status bit(2) 默认 b'1',
bio longtext COLLATE utf8_unicode_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- 表message的表结构
如果存在则删除表message;
如果不存在则创建表message (
m_id varchar(16) 整理 utf8_unicode_ci 非空,
content 文本整理 utf8_unicode_ci 不为空,
send_date 日期不为空
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- 表message_send的表结构
如果存在则删除表message_send;
如果不存在则创建表 message_send (
m_id varchar(16) 整理 utf8_unicode_ci 非空,
receiver_id varchar(16) 整理 utf8_unicode_ci 非空,
status bit(1) NOT NULL DEFAULT b'0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- 表projects的表结构
如果存在则删除表projects;
如果不存在则创建表projects (
pro_id varchar(16) 整理 utf8_unicode_ci 非空,
pro_name 文本整理 utf8_unicode_ci 不为空,
emp_id varchar(16) 整理 utf8_unicode_ci 非空,
p_describe 文本整理 utf8_unicode_ci 非空,
price int(32) 非空,
cut int(32) 非空,
s_id varchar(16) 整理 utf8_unicode_ci 非空,
status bit(2) NOT NULL DEFAULT b'1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- 表project_milestone的表结构
如果存在则删除表project_milestone;
如果不存在则创建表 project_milestone (
pm_id varchar(16) 整理 utf8_unicode_ci 非空,
pro_id varchar(16) 整理 utf8_unicode_ci 非空,
milestone int(2) 非空,
job 文本整理 utf8_unicode_ci,
deadline int(3) 默认为空,
knight_amt int(2) 默认为空
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- 表project_waiting的表结构
如果存在则删除表project_waiting;
如果不存在则创建表project_waiting (
pm_id varchar(16) 整理 utf8_unicode_ci 非空,
knight_id varchar(16) 整理 utf8_unicode_ci 非空,
chosen bit(1) NOT NULL DEFAULT b'0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- 表project_working的表结构
如果存在则删除表 project_working;
如果不存在则创建表 project_working (
pm_id varchar(16) 整理 utf8_unicode_ci 非空,
knight_id varchar(16) 整理 utf8_unicode_ci 非空,
submit 日期默认为空,
approve tinyint(1) 默认为空,
paid tinyint(1) 默认为空,
coins_paid int(32) 默认为空
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- 表security的表结构
如果存在则删除表security;
如果不存在则创建表 security (
name varchar(100) 整理 utf8_unicode_ci 非空,
value longtext COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- 表skills的表结构
如果存在则删除表skills;
如果不存在则创建表skills (
s_id varchar(16) 整理 utf8_unicode_ci 非空,
skill_name 文本整理 utf8_unicode_ci 非空
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- 转储表的索引
--
-- 表 admin 的索引
更改表admin
添加主键 (id);
--
-- 表 employers 的索引
更改表employers
添加主键 (emp_id);
--
-- 表 knights 的索引
更改表knights
添加主键(knight_id),添加键s_id(s_id);
--
-- 表 message 的索引
更改表message
添加主键 (m_id);
--
-- 表 message_send 的索引
更改表message_send
添加密钥m_id (m_id);
--
-- 表 projects 的索引
更改表projects
添加主键(pro_id),添加键emp_id(emp_id),添加键s_id(s_id);
--
-- 表 project_milestone 的索引
更改表project_milestone
添加主键(pm_id),添加键pm_id(pm_id,pro_id,milestone),添加键project_milestone_ibfk_1(pro_id);
--
-- 表 project_waiting 的索引
更改表project_waiting
添加主键(knight_id,pm_id),添加键knight_id(knight_id),添加键pm_id(pm_id);
--
-- 表 project_working 的索引
更改表project_working
添加主键(pm_id,knight_id),添加键pm_id(pm_id,knight_id),添加键knight_id(knight_id);
--
-- 表 security 的索引
更改表security
添加主键 (name);
--
-- 表 skills 的索引
更改表skills
添加主键 (s_id);
--
-- 转储表的约束
--
-- 表格约束knights
更改表knights
添加约束 knights_ibfk_1 外键 (s_id) 引用 skills (s_id) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- 表 message_send 的约束
更改表message_send
添加约束 message_send_ibfk_1 外键 (m_id) 引用 message (m_id) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- 表 projects 的约束
更改表projects
添加约束projects_ibfk_1外键(emp_id)参考employers(emp_id)在更新级联删除级联时,
添加约束projects_ibfk_2外键(s_id)引用skills(s_id)在更新级联时删除级联;
--
-- 表约束project_milestone
更改表project_milestone
添加约束project_milestone_ibfk_1外键(pro_id)引用projects(pro_id);
--
-- 表格约束project_waiting
更改表project_waiting
添加约束project_waiting_ibfk_1外键(pm_id)参考project_milestone(pm_id)在更新级联删除级联时,
添加约束 project_waiting_ibfk_2 外键 (knight_id) 引用 knights (knight_id) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- 表格约束project_working
更改表project_working
添加约束project_working_ibfk_1外键(pm_id)参考project_milestone(pm_id)在更新级联删除级联时,
添加约束 project_working_ibfk_2 外键 (knight_id) 引用 knights (knight_id) ON DELETE CASCADE ON UPDATE CASCADE;
【问题讨论】:
-
你更新然后插入同一行?
-
是的,我更新了
project_waiting然后在project_working中插入一个新的 -
您对 PHPMyAdmin 和您的 PHP 代码使用相同的用户吗?您的数据库用户是否有足够的权限更新查询?
-
当我在 localhost/phpmyadmin 的 SQL 命令上运行它时。它运行完美。我使用 XAMPP 5.6.8、PHP 5.6.8、MYSQL 5.0.11
-
而你的 PHP 代码使用的是同一个用户? :)