【问题标题】:Php: MySql append to existing row [closed]PHP:MySql 附加到现有行 [关闭]
【发布时间】:2015-05-27 04:05:41
【问题描述】:

我正在尝试通过这样做来附加到用户 Jake 的“项目”

UPDATE login SET projects='CONCAT(projects, '$id,')' WHERE username='$name'

但它什么也没做。有什么好的 MySql 代码附加到特定行的列的想法吗?

【问题讨论】:

  • 真的是“CONACT”而不是“CONCAT”吗?
  • "更新登录 SET projects = CONCAT(projects, $id) WHERE username=$name";
  • 你确定它什么都不做?我敢打赌会产生一些错误
  • 没有错误。我尝试了 CONCAT,但它不起作用
  • 请在 CLI 环境或 PHPMyAdmin 中运行查询并告诉我们您得到的结果。 MySQL 总是说 something ... PHP 不一定会告诉你它在说什么...

标签: php mysql


【解决方案1】:

前言。请完整阅读我的答案,而不仅仅是代码。

  • 请参阅“脚注”以获取经过测试/工作的示例。

除了CONACT 的拼写错误,您需要删除引号和逗号。

在函数中使用引号时,您传递的是文字字符串。

UPDATE login SET projects='CONACT(projects, '$id,')' WHERE username='$name'
                          ^                     ^  ^
  • 在您的查询中检查错误,在您目前的用法中会产生类似于以下内容的内容:(以“1”和“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.error-reporting.php

另请参阅此链接以选择您的 MySQL API:


error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告只能在暂存阶段完成,而不能在生产阶段完成。


我相信我已经给了你足够的信息。尝试不同的方法;你不会破坏任何东西。

也可以在CONCAT上查看这些链接


脚注:(测试代码)

按照上面的建议并使用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.";
}

旁注:

【讨论】:

    【解决方案2】:

    您的 sql 查询充满了拼写错误...将您的查询更改为:

    "UPDATE login SET projects=CONCAT(projects, $id) WHERE username='".$name."'";
    

    【讨论】:

      猜你喜欢
      • 2013-08-08
      • 2012-08-19
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多