Php 更新行(如果存在),如果不存在,则创建新行
我正在将姓名、号码和公司插入数据库 我的桌子很简单:Php 更新行(如果存在),如果不存在,则创建新行,php,mysql,Php,Mysql,我正在将姓名、号码和公司插入数据库 我的桌子很简单: id(primary key) name slideView company 如果传递给它的名称存在,我需要更新此信息,如果不存在,则使用此数据创建新行。我已经把替换为了,但我认为这对我不起作用。。。因为我根本不碰身份证 我的代码是: insertData($name,$count,$company); function insertData($name, $count, $company) { #Try/Catch state
id(primary key)
name
slideView
company
如果传递给它的名称存在,我需要更新此信息,如果不存在,则使用此数据创建新行。我已经把替换为了,但我认为这对我不起作用。。。因为我根本不碰身份证
我的代码是:
insertData($name,$count,$company);
function insertData($name, $count, $company) {
#Try/Catch statement to connect to DB, and insert data
try {
#DB username/password
$usernameDB = '****';
$passwordDB = '****';
#Create new PHP Database Object with the address, username, and password as parameters
$pdo = new PDO('mysql:host=localhost;dbname=*****', $usernameDB, $passwordDB);
#Set pdo attributes to handle errors
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
#assign the sth variable (sth means statement handle) to insert the data
$sth = $pdo->prepare("REPLACE INTO ***** SET name = ?, slideView = ?, company = ?");
#Execute the insert
$sth->execute(array($name,$count,$company));
#Error if can't connect or insert
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
}#/try
}
我是SQL新手,还没有找到一个好方法来实现这一点。替换为应该可以很好地工作-它还检查具有唯一约束的列。因此,您只需要将其替换为将其标识为重复的
我还没有尝试过这个特定的用例,但文档似乎允许它。您最好使用插入。。。在重复更新时
此语法,虽然这意味着传递一些额外的参数,但它可以取消某些似乎不断出现的语法
REPLACE INTO ***** SET name = ?, slideView = ?, company = ?
可以写成:
insert into yourTableName (name, slideView, company)
values (:name, :slideView, :company)
on duplicate key update set
slideView=:$slideView2, company=:company2
然后执行过程如下所示:
$sth->execute(array(':name' => $name, ':slideView' => $count,
':company' => $company, ':slideView2' => $count, ':company2' => $company));
上述格式使用命名参数(它们更易于读取/调试),并将向数据库中插入新行,或者如果唯一/主键列name
已具有该值,则使用其余信息更新该行
您必须在这里使用两次参数(即使slideView和company将包含相同的信息),因为在查询中任何参数都不能使用两次。这似乎是正确的。尽管它抛出了这个错误:error:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行“SET slideView=NULL,company=NULL”附近使用的正确语法。此外,我正在运行MySQL版本5.1.61
I已删除SET
,并运行了查询,虽然没有更新任何内容,但每次都会添加新行。@m是否将表中的name
设置为唯一行?是吗?我选择返回到原来的状态。一旦我将我的名字列标记为唯一,它就起作用了。谢谢