php - 更新数据库中的记录时出错

标签 php mysql pdo

你好,我正在尝试通过我的表单和 postman 提交更新请求,但我在响应中不断收到相同的内容,因为它有效

updated

我的数据库中没有任何变化。

这里是我的函数

function update(Request $request, Response $response) {
    $id = $request->getAttribute('id');
    $name = $request->getParam('name'); 
    $start = $request->getParam('start');
    $end = $request->getParam('end');


    $sql = "UPDATE table_timing SET
                name  = :name,
                start  = :start,
                end  = :end

            WHERE table_timing.id = :id";

    try {
        $db = new db();
        $db = $db->connect();
        $stmt = $db->prepare($sql);

        $stmt->bindParam(":id", $id);
        $stmt->bindParam(':name', $name);
        $stmt->bindParam(':start', $start);
        $stmt->bindParam(':end', $end);


        $stmt->execute();

        $db = null;

        $response->getBody()->write
            ('
            {
                "notice":
                {
                    "status":"200",
                    "message":"Updated"
                }
            }');

    } catch(PDOException $e) {
        $response->getBody()->write
        ('
        {
            "error":
            {
                "message":'. $e->getMessage() .'
            }
        }');
    }
};

这是 postman 返回的内容

{ "error": { "message":SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null } }

直接在 sql 上运行良好

直接在sql上运行的查询是

UPDATE `table_timing` SET `name`='2016',`start`='2017-06-18 21:29:06',`end`='2017-06-18 21:29:06' WHERE `id`='1'

该函数是通过我的 api 中的以下路由调用的

这是我如何通过它们

if (isset($_GET['id']) ) { 
    $id = (int) $_GET['id']; 
    if (isset($_POST['submit'])) { 

        $sName = '';
        $sStart = '';
        $sEnd = '';


        if(isset($_POST['sname'])){
            $sName = $_POST['sname'];
        }                       
        if(isset($_POST['sstart'])){
            $sName = $_POST['sstart'];
        }
        if(isset($_POST['send'])){
            $sName = $_POST['send'];
        }

            //SQL queries
            $raw = [ 
                    'name' => $sName,
                    'start' => $sStart,
                    'end' => $sEnd
            ];
            $data = http_build_query ($raw);

            $result = file_get_contents(
            BASE_URL . '/timing/update/'.$id, 
            false,                                  
            stream_context_create(array(
                PROTOCOL => array(
                    'method' => 'PUT',
                    'header' => array(
                        'Authorization: Bearer '.$token,
                        'Content-Length: ' . strlen($data),
                        'Content-Type: application/x-www-form-urlencoded; charset=UTF-8'
                    ),                                   
                    'content' => $data
                )
            ))
        );

        $response = json_decode($result, false);
        echo $response->notice->message;
    }
}   

我尝试打印 $raw $data $id $apikey 它们都正确显示

最佳答案

我想通了,

我有请求的参数

$id = $request->getAttribute('id');
$name = $request->getParam('name'); 
$start = $request->getParam('start');
$end = $request->getParam('end');

与发送的不同

 $raw = [ 
       'name' => $sName,
       'start' => $sStart,
       'end' => $sEnd
        ];

关于php - 更新数据库中的记录时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45595479/

相关文章:

javascript - 具有重定向功能的 Windows 警报 javascript

php - 检索并格式化 MySQL 结果列中的所有 hasMany 记录

php - 如果一行不为 null 且不为空,如何显示它?

python - 如何在 sqlalchemy 中将变量作为列名传递?

mysql - 需要一个使用 adoconection 的示例来避免 mysql 服务器消失

php - 什么是客户端准备好的语句?

PHP PDO 无法更新

php - Strato 服务器 PHP Zend PDOException 套接字

php - 使用 .htaccess 文件重定向到另一台服务器失败

php - 以编程方式为视频添加水印