gpt4 book ai didi

php - 在 PHP 中使用存储过程

转载 作者:行者123 更新时间:2023-11-29 01:41:28 25 4
gpt4 key购买 nike

我在我的数据库中使用 mysql 存储过程,现在我希望能够将它与我的 php 代码一起使用,但是我搜索过的所有示例都没有显示执行此操作的明确方法。有人能告诉我为什么这不起作用吗?

<html>
<head>
<title>Add</title>
<link rel="stylesheet" type="text/css" href="main.css">
<?php include("navbar.php")?>
</head>

<body>
<?php
if(isset($_POST['submit'])) {
$link = mysqli_connect("localhost", "root", "", "test");

$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];

mysqli_query($link, "CALL AddUser($firstname, $lastname)");
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
First Name:<input type="text" name="firstname" required>
Last Name:<input type="text" name="lastname" required>
<input type="submit" value="submit">
</form>

</body>
</html>

这是存储过程

CREATE DEFINER=`root`@`localhost` PROCEDURE `AddUser`(IN in_first_name VARCHAR(100), IN in_last_name VARCHAR(100) )
BEGIN
INSERT INTO `users`(first_name, last_name) VALUES (in_first_name, in_last_name );
END

这是数据库test中的表

CREATE TABLE IF NOT EXISTS `users` (
`users_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`first_name` varchar(100) NOT NULL,
`last_name` varchar(100) NOT NULL,
PRIMARY KEY (`users_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

--

-- 转储表 users

的数据
INSERT INTO `users` (`users_id`, `first_name`, `last_name`) VALUES
(1, 'Joey', 'Rivera'),
(2, 'John', 'Doe'),
(3, 'Cesar', 'Guerrero'),
(4, 'Maribel', 'Guerrero'),
(8, 'Marc', 'Jacobs');

最佳答案

字符串文字应该被引用。尝试改变

mysqli_query($link, "CALL AddUser($firstname, $lastname)");

mysqli_query($link, "CALL AddUser('$firstname', '$lastname')");
^ ^ ^ ^

并至少添加一些基本的错误处理

$link = mysqli_connect("localhost", "root", "", "test");
if (mysqli_connect_errno()) {
echo "Connect failed: " . mysqli_connect_error();
exit();
}
if (!$mysqli_query("CALL AddUser('$firstname', '$lastname')")) {
echo "CALL failed: " . $mysqli_errno($link) . " - " . $mysqli_error($link);
exit();
}

旁注:考虑学习和使用 prepared statements打算插入查询字符串。


使用准备好的语句的代码版本可能如下所示

<?php
if (isset($_POST['submit'])) {

$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];

$link = new mysqli('localhost', 'root', '', 'test');
if (mysqli_connect_errno()) {
die('Connect failed: ' . mysqli_connect_error()); //TODO: a better error handling
}
$stmt = $link->prepare("CALL AddUser(?, ?)");
if (!$stmt) {
die('Prepare failed: ' . $link->error); //TODO: a better error handling
}
$stmt->bind_param('ss', $firstname, $lastname);
if(!$stmt->execute()) {
die('Execute failed: ' . $link->error); //TODO: a better error handling
}
}
?>

正如@MayurKukadiya 提到的,将 name 属性添加到您的输入中

    <input type="submit" name='submit' value="submit">

关于php - 在 PHP 中使用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20437380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com