我试图通过这样做来附加到用户Jake的'项目'
UPDATE login SET projects='CONCAT(projects, '$id,')' WHERE username='$name'
但是它什么也不做。有什么好的MySql代码是附加到一个特定的行列吗?
前言。请把我的答案完整地看一遍,不要只看代码。
- 请参阅"脚注"以获得测试/工作示例。
除了CONACT
的错字外,您还需要删除引号和逗号。
在函数中使用引号时传递的是一个字面值字符串。
UPDATE login SET projects='CONACT(projects, '$id,')' WHERE username='$name'
^ ^ ^
- 检查你的查询中的错误,会产生类似于以下使用你现在的用法:(以"1"one_answers"John"为例)。
你的SQL语法有错误;查看与MySQL服务器版本对应的手册,以便在第2行'1,')' WHERE username='John "附近使用正确的语法
修改为:
UPDATE login SET projects = CONCAT(projects, '$id') WHERE username='$name'
或不带引号的$id
,如果它确实是整数。
UPDATE login SET projects = CONCAT(projects, $id) WHERE username='$name'
取决于你如何使用你的查询通过一个连接,将类似于这样的东西,作为一个MySQLi方法:
$query = mysqli_query($connection,
"UPDATE login
SET projects = CONCAT(projects, '$id')
WHERE username='$name'")
or die(mysqli_error($connection));
同时确保两个变量确实被正确设置和填充。
如果来自HTML表单,请确保它们有名称属性,并且方法是正确的。
。: <input type="text" name="username">
如果来自形式:$name = $_POST['username'];
另外,因为我们不知道你正在使用哪个MySQL API来连接,或者你是否已经成功地建立了到数据库的连接,所以只有你知道,所以如果你是,很好。
如果没有,那么这可能意味着在某个地方有错误,但你可能没有检查它们。
旁注:当你告诉我们"它不工作",这对任何人都没有帮助。
我们需要知道准确的错误信息,是否以及何时检查它们。
这里有一些链接,你可以根据你的MySQL API查看和使用错误检查方法。
- http://php.net/manual/en/function.mysql-error.php - MySQL
- http://php.net/manual/en/mysqli.error.php - MySQLi
- http://php.net/manual/en/pdo.error-handling.php - PDO
错误报告:http://php.net/manual/en/function.error-reporting.php
请参阅此链接来选择您的MySQL API:
- https://php.net/mysqlinfo.api.choosing
将错误报告添加到文件的顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告只应该在登台阶段进行,而不应该在生产阶段进行。
我相信我已经给了你足够的信息。尝试不同的方法;你不会弄坏任何东西的。
请参阅CONCAT
- http://www.mysqltutorial.org/sql-concat-in-mysql.aspx
- https://dev.mysql.com/doc/refman/5.0/en/string-functions.html
脚注:(测试代码)
下面的工作完美无缺,正如上面所建议的,使用mysqli_affected_rows()
。
<?php
$DB_HOST = 'xxx'; // Replace
$DB_USER = 'xxx'; // with
$DB_PASS = 'xxx'; // your
$DB_NAME = 'xxx'; // own
$db = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($db->connect_errno > 0) {
die('Connection failed [' . $db->connect_error . ']');
}
$id = 1; // wrap in quotes if it's a string, like "string_1".
$name = "John"; // an example only
$query = mysqli_query($db,
"UPDATE login
SET projects = CONCAT(projects, '$id')
WHERE username='$name'")
or die(mysqli_error($db));
if(mysqli_affected_rows($db)){
echo "Successfully updated the database.";
}
else{
echo "Sorry, check your logs.";
}
旁注:
- 你现在的代码是开放的SQL注入。使用
mysqli
和预编译语句,或者PDO和预编译语句, 它们更安全。
你的sql查询充满了打字错误…将查询改为:
"UPDATE login SET projects=CONCAT(projects, $id) WHERE username='".$name."'";