PHP MySQL"DELETE FROM`table` WHERE`id` = | unknown column`id`

zer*_*tap 0 php mysql

我的代码:

if (isset($_POST['del'])) {

  foreach ($_POST['del'] as $id){        
    if ($stmt = $mysqli->prepare("DELETE FROM `users` WHERE `?id` = ?")) {
    $stmt->bind_param('i', $id);
    $stmt->execute();
    } else {
      printf("Errormessage: %s<br>", $mysqli->error);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

结果: Errormessage: Unknown column '??id' in 'where clause'

$_POST['del'] 包含表单复选框的整数.

但是,它之前使用的是相同的连接,它可以工作:

$modified = arrayRecursiveDiff($_POST, $data);

foreach($modified as $key => $val_arr) {
  if (!is_array($val_arr)) {continue;}
  foreach ($val_arr as $iteration => $val) {
    $id = $iteration + 1;

    $query = 'UPDATE users
    SET '. $key .'="'. $val .'"
    WHERE id = '. $id;

    if (preg_match('/.*\sdel\=.*/',$query) === 0){
      $mysqli->query($query);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

最有趣的是,我试图回应该查询并将其直接复制到mysql命令提示符中.它工作得很完美......

如果有人能够回答可能出现的问题,我将不胜感激,

Fun*_*ner 6

似乎有一些奇怪的角色(编辑:参考脚注)就像之前的反叛id,但事实上并非如此.

我无法准确地从编辑那里说出来.(编辑:参考脚注)

改变这一行:

if ($stmt = $mysqli->prepare("DELETE FROM `users` WHERE `??id` = ?")) {
Run Code Online (Sandbox Code Playgroud)

if ($stmt = $mysqli->prepare("DELETE FROM `users` WHERE `id` = ?")) {
Run Code Online (Sandbox Code Playgroud)

编辑

在您使用更新的代码编辑问题并将查询行复制/粘贴到我的编辑器中后,我再次进入编辑模式(美国东部时间晚上11点),并且在您的第一个反引号和单词之间仍然存在一个奇怪的字符id.

if ($stmt = $mysqli->prepare("DELETE FROM `users` WHERE `??id` = ?")) {
                                                        ^^
Run Code Online (Sandbox Code Playgroud)

将此实际代码复制/粘贴到您的文件中.但我很想知道你正在使用哪个文件编辑器导致这种情况,或者你是手动输入?

if (isset($_POST['del'])) {

  foreach ($_POST['del'] as $id){        
    if ($stmt = $mysqli->prepare("DELETE FROM `users` WHERE `id` = ?")) {
    $stmt->bind_param('i', $id);
    $stmt->execute();
    } else {
      printf("Errormessage: %s<br>", $mysqli->error);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

脚注:

从我在编辑器中找到的内容来看,它似乎是(或者)&#8206;之前的这个unicode角色id

Unicode hex:8206
Unicode decimal:33286
UTF-8 Hex:e88886
HTML实体:舆
来源:http://www.htmlescape.net/82/character_8206.html


或者来自:http://en.wikipedia.org/wiki/Left-to-right_mark

我引用:"LRM使标点符号仅与LTR文本相邻 - "C"和LRM标记 - 因此位置就好像它是从左到右的文本,即在前面的文本的右边.&#8206;或者&lrm;可以通过一些软件,而不是无形的Unicode字符本身需要; 实际无形的性格也会使副本编辑困难. "

补充说明:我在这个主题上找到的维基百科信息,我最初在谷歌搜索时发现,这使我进入了这个页面,这使我进入了上面发布的维基百科页面.


原始问题中的另一个Unicode字符是 &#780;

unicodemap.org和我引用:"Unicode Character Map - 0x036F (a.k.a. "?")"

Unicode Hexadecimal: 0x030C
Unicode Decimal: 780
UCS-2 Hexadecimal: 0x0C03
UCS-2 Decimal: 3075
HTML Hexadecimal: &#x030C;
HTML Decimal: &#780;

角色(可能有点难以看到):

       ̌