【问题标题】:How can I update 1 row of an SQL table using PHP?如何使用 PHP 更新 SQL 表的 1 行?
【发布时间】:2020-02-28 20:12:41
【问题描述】:

我正在制作一种数据共享系统,管理员可以在其中创建项目,向它们添加模板(例如:文本 1 最多只能有 20 个字符),然后将它们分配给用户。然后,用户可以根据自己的喜好更新项目(例如,更改默认文本)。

在下一个屏幕截图中,有一个用户如何在项目中查看的示例(西班牙语,抱歉):

问题是,当用户更新他的文本 1 时,文本 1 和 2 会同时更改,这甚至会转到分配给同一用户的各种其他项目。

文本更新完成的方式是这样的:

<div class="col-md-6 row">
                        <label for="texto_id" class="col-md-4 col-form-label">Change Text</label>
                        <br>
                        <select id="texto_id"
                        class="form-control @error('texto_id') is-invalid @enderror" 
                        name="texto_id"
                        value="{{ old('texto_id') }}" 
                        required autocomplete="texto_id" 
                        autofocus>
                            <option value="null"> </option>

                            @foreach($proyecto_data as $prt_data)
                            @foreach($texto_data as $txt)
                                @foreach($texto_proyecto_data as $txt_prt)
                                    @if($txt_prt->id_texto_data == $txt->id)
                                        @if($txt_prt->id_proyecto_data == $prt_data->id)
                                         

                                            <option value="{{ $txt->id }}">{{ $txt->nombre }} which has min {{ $txt->min }} and max {{ $txt->max }}</option>
                                        
                                        @endif
                                    @endif
                                @endforeach
                            @endforeach
                        @endforeach
                        </select>

                        @error('name')
                            <span class="invalid-feedback" role="alert">
                                <strong>{{ $message }}</strong>
                            </span>
                        @enderror
                    </div>

用户选择与他们关联的文本并编写新文本,以下是其屏幕截图:

之后,变量被发送到更新表格的 php 脚本,为此我尝试了接下来的 2 行:

$sql = "UPDATE texto_datas SET texto = " .  $texto_valor . "WHERE id=" .  $id_texto_valor;

DB::update('update texto_datas set texto = ?', $texto_array ,'where id = ?', $id_texto_valor);

第一个绝对不做任何事情,而第二个更改与用户关联的所有文本,立即忽略 where。

是不是我做错了什么?

【问题讨论】:

  • 您的第一个选项什么都不做,因为它所做的只是创建一个名为$sql 的变量,其中包含一些文本。系统不会因为您以这种方式命名变量而神奇地知道您想将其作为 SQL 查询执行。 (如果确实如此,它将对 SQL 注入开放,并且由于文本字段周围缺少引号而失败。)

标签: php sql laravel


【解决方案1】:

您没有正确使用query builder。你需要做的:

DB::table('texto_datas')
    ->where('id', $id_texto_valor)
    ->update(['texto' => $texto_array]);

【讨论】:

  • 我马上试试
  • 成功了!!!!!!谢谢 !!!! (出于某种原因,它说我必须等待 7 分钟才能检查,所以我会在允许的时候进行)
  • 很高兴它有帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
相关资源
最近更新 更多