jackytom
@jackytom

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

mariadbへのインサートでエラー

Q&A

Closed

https://qiita.com/jackytom/questions/cc81fb045aebe135c457#answer-f37c3c748ce05f27f1c6
の続きになります。

上記で解決したと説明しましたが、暗号化のパスワードが「.pass.」の文字列になってしまいました。

本来は$password変数に格納されている文字列を利用したいため、再度ソースを見直しました。

そして、書き直したのが添付しているソースです。

しかしながら、

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;

とエラーになってしまいました。

要はSQL構文エラーと思っていてSQLを再確認しましたが、恥ずかしながらどこに問題があるのか見つけられませんでした。

問題点を見つけるのにご協力いただければ幸いです。
よろしくお願いいたします。

該当するソースコード

<?php
	session_start();
		if (isset($_POST['token']) && isset($_SESSION['token'])) {
			$token = $_POST['token'];
			}
			else if ($token != $_SESSION['token']) { 
				header("Location: contact.php");
				echo ('アクセスが中断されました。');
				exit();
				}
					else {
						header("Location: contact.php");
						echo ('不正なアクセスです');
						exit();
						}

	session_destroy();

	function escape($val)
	{
		return htmlspecialchars($val, ENT_QUOTES | ENT_HTML5, 'UTF-8');
	}
	require_once('db_connect.php');
	require_once('password_db.php');
?>
<!doctype html>
<html lang=ja>
	<head>
		<meta charset="utf-8">
		<title>Salon Yuri-rinへのお問い合わせ</title>
		<meta name="description" content="ヘッドセラピーを中心としたセラピーのサービスを提供しております。">
		<!--リセットcss-->
		<link rel="stylesheet" href="https://unpkg.com/ress/dist/ress.min.css">
		<!--css-->
		<link href="css/contact_style.css" rel="stylesheet">
		<!--レスポンシブ対応-->
		<meta name="viwport" content="width=device-width, initial-scale=1">
		<!--Googleフォント-->
		<link href="https://fonts.googleapis.com/css2?family=Sawarabi+Gothic&display=swap" rel="stylesheet">
		<link href="https://fonts.googleapis.com/css2?family=Shippori+Mincho:wght@500&display=swap" rel="stylesheet">
	</head>
	<body>
		<?php require_once('header.php');?>
		<main>
			<h1>
				Salon Yuri-rinへの問い合わせ
			</h1>
		<?php
			$sql=$pdo->prepare("insert into contact(contact_id,members_id,contact_date,last_name,first_name,last_name_kana,first_name_kana,mail_address,contact_div_id,contact_cont,agree_div,anser_date,anser_cont,anser_div,anser_user) values
			(null,
			null,
			null,
			HEX(AES_ENCRYPT(?," . $password . ")),
			HEX(AES_ENCRYPT(?," . $password . ")),
			HEX(AES_ENCRYPT(?," . $password . ")),
			HEX(AES_ENCRYPT(?," . $password . ")),
			HEX(AES_ENCRYPT(?," . $password . ")),
			?,
			?,
			1,
			null,
			null,
			null,
			null)");

			if($_SERVER['REQUEST_METHOD'] === 'POST'){
				if(empty(escape($_POST['sei'])) || empty(escape($_POST['mei'])) || empty(escape($_POST['sei_kana'])) || empty(escape($_POST['mei_kana'])) || empty(escape($_POST['mail_address'])) || empty(escape($_POST['contact_cont']))){
					echo '未入力の項目があります。';
				}
				else if(escape($_POST['contact_div']) === "0"){
					echo '問い合わせ区分を選択してください。';
				}
				else if(!preg_match('/\A[ァ-ヴー]+\z/u', $_POST['sei_kana']) || !preg_match('/\A[ァ-ヴー]+\z/u', $_POST['mei_kana'])){
					echo 'カナ名は全角カナで入力します。';
				}
				else if(!preg_match('/^[a-zA-Z0-9_.+-]+(\.[a-zA-Z0-9_+-]+)*@([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\.)+[a-zA-Z]{2,}$/',$_POST['mail_address'])){
					echo 'メールアドレスはメールアドレスの形式で入力します。';
				}
				else if($sql -> execute([
					escape($_POST['sei']),
					escape($_POST['mei']),
					escape($_POST['sei_kana']),
					escape($_POST['mei_kana']),
					escape($_POST['mail_address']),
					escape($_POST['contact_div']),
					escape($_POST['contact_cont'])
					]))
					{
					require_once('contact_mail_c.php');
					require_once('contact_mail_s.php');
					header('Location: contact_end.php', true, 303);
					exit();
						}
						else {
							echo '登録に失敗しました。';
							}
		}?>
		<?php require_once('footer.php');?>
	</body>
</html>
0

1Answer

自己レスです。
HEX(AES_ENCRYPT(?," . $password . ")),

HEX(AES_ENCRYPT(?,'" . $password . "')),
にして解決しました。
お騒がせしました。

0Like

Your answer might help someone💌