2016-07-14 27 views
0
$query = $database->prepare("SELECT * FROM Users WHERE username=:username SET profilePicturePath=:pic"); 
$query->bindParam(":pic", $_FILES['profilePic']['name']); 
$pic = "hellow"; 
$query->bindParam(":username", $pic); 
$query->execute(); 

pic变量仅用于测试。无论如何,我可以确认用户名=:用户名是真实的,这只是重置语句的问题。正如我所说,除了陈述本身之外,不存在任何问题。我在一个mssql 2008数据库上使用php7。感谢您的输入!MSSQL更新选择和SET查询不起作用

编辑 替换代码这一点,仍然不能正常工作:

$query = $database->prepare("SELECT * FROM Users WHERE [email protected] SET [email protected]"); 
$pic = "hellow"; 
$query->bindParam("@pic", $pic); 
$query->bindParam("@username", $_SESSION['Username']); 
$query->execute(); 

来自用户的作品选,但下面不工作之一:

"UPDATE Users SET profilePicturePath = 'Silver Magic' WHERE Username = 'ekampel';" 
+0

尝试在其中的条件中将':'替换为'@'。例如: - 用户名= @用户名 –

+0

这甚至不接近更新语法。 –

+0

@IvanStarostin那么正确的语法是什么...... – Wyatt

回答

0

尝试查询作为

"UPDATE Users SET [email protected] WHERE [email protected]" 
+0

试过这个查询,仍然没有改变数据库中的任何东西。 – Wyatt

+0

SELECT * FROM用户确实有效。我刚测试过。 – Wyatt

0

根据MSDN页面,SELECT语句中的更新不被SQL Ser允许ver的SELECT语法:https://msdn.microsoft.com/en-us/library/ms189499(v=sql.110).aspx。 你要做两个单独的语句,一个选择:

$query = $database->prepare("SELECT * FROM Users WHERE username=:username"); 
$pic = "hellow"; 
$query->bindParam(":username", $pic); 
$query->execute(); 

,另一个用于更新:

$query = $database->prepare("UPDATE Users SET profilePicturePath=:pic where username = :username"); 
$query->bindParam(":pic", $_FILES['profilePic']['name']); 
$query->bindParam(":username", $pic); 
$query->execute(); 

此外,进行更新工作,确保用户在目标数据库中有UPDATE权限。您可以通过将用户添加到目标数据库中的db_datawrite数据库角色来授予更新和插入权限:

USE target_database; ALTER ROLE db_datawriter ADD MEMBER user_name;