データベースにsql文を使ってデータを追加するという処理を参考書で学んでいました。
そこで2つわからないことが出てきました。
まず一つ目は、
$sql=$pdo->prepare("insert into product values(null,?,?)");
(↑参考書より抜粋)
この部分でなぜ(null,'?',?)ではないのかが疑問です。
試しに''をつけて実行すると失敗してしまいます。
phpはユーザーがコードをミスしてもある程度修正してくれるということを聞いたことがあったので何か型によって自動的に文字列や整数値に変換される処理がされているのかと思い以下のことを試してみました。
・sql文の(null,テスト,100)をphpmyadminで実際に実行できるのか→失敗
work.php内のコードが(null,?,?)の場合、
・両方整数値(三桁)をブラウザで入力した場合は実行されるのか→成功
・両方文字列(英語一文字)をブラウザで入力した場合は実行されるのか→失敗
整数で入力されたものは整数のまま保存されていたためchar型だからと言って文字だけしか入力できないというようなこともないと分かりました。ですが一つ目の問題が解決していないことに加えもう一つわからないことが出てきました。
二つ目はなぜ文字コードとしては英語の一文字の方が短いにも関わらず保存に失敗してしまったのかということです。
よろしければご教授ください。お願いします。
php
1<?php require "header.php"; ?> 2<form action="work.php" method="post"> 3商品名、価格を入力してください 4<p>商品名<input type="text" name="keyword"></p> 5<p>価格<input type="text" name="keyprice"></p> 6<input type="submit" value="追加"> 7</form> 8<?php require "footer.php"; ?>
php
1//work.php 2<?php require "header.php"; ?> 3<?php 4$pdo=new PDO('mysql:host=localhost;dbname=shop;charset=utf8', 5'staff','password'); 6 7$sql=$pdo->prepare("insert into product values(null,?,?)"); 8//テーブルproductの構造、、(id int(11),name varchar(200),price int(11)) 9 10if($sql->execute([$_REQUEST['keyword'],$_REQUEST['keyprice']])) { 11 echo '追加に成功しました'; 12} else { 13 echo '追加に失敗しました'; 14} 15?> 16 17<?php require "footer.php"; ?>
php
1//header.php 2<!DOCTYPE html> 3<html lang="jp"> 4<head> 5 <meta charset="UTF-8"> 6 <title>Document</title> 7</head> 8<body> 9 10//footer.php 11</body> 12</html>
回答1件
あなたの回答
tips
プレビュー